首页 > 教育

Segmentationfault(coredumped)

更新时间2019-03-15 18:35:41

大佬


void layout()

{

char temp[300]={"NULL"};

int count=0;

int counttwo=0;

printf("Please enter text content: ");

int i;

for(i=0;i<300;i++)

{

scanf("%s",temp[i]);

}

count=strlen(temp);

int j;

for( j=0;j<count;j++)

{

printf("-");

printf("%s",temp[i]);

counttwo++;

int a=(20-counttwo%20);

if(counttwo<20)

{

int n;

for( n=0;n<a;n++)

{printf(" ");}

printf("- ");

}else if(counttwo%20==0)

{

 

printf("- ");

int m;

for( m=0;m<a;m++)

{printf(" ");}

printf("- ");

 

}

}

 

}


segmentation fault 即段错误,一般都是出现了非法的地址写操作导致的。

常见的有如下几种况:

1、空指针访问。

如果指针为空(NULL), 那么对空指针的读写操作都会导致segmentation fault。

123   char *p = NULL;printf("%c",*p);//读操作*p='A';//写操作。  

两种操作任意一种都会导致segmentation fault。

2、指针指向非法区域后的写操作。

c语言的指针指向了非法区域,然后对其写入,会带来不可预知后果,最严重的就是程序崩溃,此时也是segmentation fault。

比如

123   char *p = malloc(100);//申请100字节空间p+=1000;//超出申请范围。*p='a';//此时就有可能出现segmentation fault  

或者

123   char *p = malloc(100);//申请内存free(p);//释放*p = 'a';//此时p指向空间已经释放,有可能被系统用作其它功能,对其赋值就可能出现segmentation fault。  

3、常量空间破坏。

比如常量字符串,如果修改其内容,则会出现segmentation fault。

12   char *p = "abcdef";//p指向常量字符串。p[1] = 'M';//修改常量空间,导致segmentation fault  

4、在一些比较老的操作系统上,非对齐访问也可能导致segmentation fault。

比如

1234   int a[2];char *p1 = (char *)a;//指向数组首地址。int *p2 = (int *)(p1+1);//实际上将a[0]和a[1]的各一部分,组成了一个新的int。 这时对p2的访问,包括读写,都属于非对齐访问。*p2=3;//此时有可能出现segmentation fault  


上一篇:建筑工地运输混凝土的圆柱形管道内直径为10cm,混凝土在管道内的流速为每分35m

下一篇:lm317和lm337的可调电压,用两个变压器。不懂怎么弄