当前位置: 技术问答>linux和unix
奇怪的segmentation fault 错误!!!!!!!!!!!!!!
来源: 互联网 发布时间:2015-11-06
本文导语: 下面这段代码在tc2.0下编译运行,结果正确。但在redhat9.0下用gcc编译通过,运行时出现 segmentation fault 错误,怎么回事????gcc编译器检查如此严格????? #include int main() { ch...
下面这段代码在tc2.0下编译运行,结果正确。但在redhat9.0下用gcc编译通过,运行时出现
segmentation fault 错误,怎么回事????gcc编译器检查如此严格?????
#include
int main()
{
char *s="Golden Global View";
char d[20];
//clrscr();
//strcpy(d,s);
//printf("%s",d);
memset(s,'w',4);
printf("%s",s);
getchar();
return 0;
}
segmentation fault 错误,怎么回事????gcc编译器检查如此严格?????
#include
int main()
{
char *s="Golden Global View";
char d[20];
//clrscr();
//strcpy(d,s);
//printf("%s",d);
memset(s,'w',4);
printf("%s",s);
getchar();
return 0;
}
|
char *s都没有开辟空间,你还memset
windows下运行通过是你运气好
别出了错就怨编译器,好好查查自己的代码
windows下运行通过是你运气好
别出了错就怨编译器,好好查查自己的代码
|
char *s="Golden Global View";指向的是静态数据区,在linux下是不可写的,不能用memset。
windows下不是不可写的,所以没问题。
windows下不是不可写的,所以没问题。
|
呃,挑根刺……
回复人: fierygnu(va_list) ( ) 信誉:105 2006-1-10 14:37:59 得分: 0
char *s="Golden Global View";指向的是静态数据区,在linux下是不可写的,不能用memset。
windows下不是不可写的,所以没问题。
----------------
windows下其实也是不可写的,但是这位仁兄是在tc下编译的,所以是16位的可执行文件,windows会把它在一个虚拟的dos环境下执行,而在这个环境下(以及真正的dos下)没有严格的地址检查,所以通过了。
回复人: fierygnu(va_list) ( ) 信誉:105 2006-1-10 14:37:59 得分: 0
char *s="Golden Global View";指向的是静态数据区,在linux下是不可写的,不能用memset。
windows下不是不可写的,所以没问题。
----------------
windows下其实也是不可写的,但是这位仁兄是在tc下编译的,所以是16位的可执行文件,windows会把它在一个虚拟的dos环境下执行,而在这个环境下(以及真正的dos下)没有严格的地址检查,所以通过了。
|
不要一来就说是编译器的事,先区分不同的编译器不同之处后,再发话
|
高手啊,运行出错关编译器什么事呢?