【发布时间】:2011-09-02 06:14:53
【问题描述】:
这是一段代码……
void main()
{
char *p="Hello";
*p= 'h'; // Segmentation fault .
}
我理解存在分段错误并且它也给我一个运行时错误的事实。但我想知道,为什么它是一个运行时错误?为什么编译器在执行程序之前不能告诉我?为什么不显示编译时间错误?
PS : 我使用 Visual C++ 2005 Express ..
【问题讨论】:
-
之前被问过很多次,例如stackoverflow.com/questions/5189782/…
-
您是否启用了编译器警告?我不了解 Visual C++,但 GCC(具有默认警告级别)肯定会针对从字符串常量到
char *的转换发出警告。它还正确地给出了一个错误,因为它没有从 main 中返回int。 -
@ Mike .. 我不确定.. 问题是我使用 Turbo C 来学习 C ..(请不要笑 :D).. 并且是 Visual C++ 编译器的新手.. 我不知道如何启用编译器警告,我也认为默认情况下它被设置为'禁用'..因为即使我没有从 int main() '返回',我也没有收到警告。
-
@Appy:在 C++ 中,不需要从
main返回;如果您的代码从底部掉下来,编译器会自动有效地插入return 0;。但它的返回类型仍必须为int。 -
@ Chris .. 感谢您的回复.. :) 我也发现这很有用.. 我希望你的意思是传达这个.. stackoverflow.com/questions/204476/… 但我的程序也运行 void main() 。 . ?!!
标签: c++ compiler-errors segmentation-fault