错误:Segmentation fault: 11
segmentation fault 即段错误,一般都是出现了非法的地址写法操作导致的。
Segmentation fault: 11常见的几种情况:
1、空指针访问。

如果指针为空(NULL), 那么对空指针的读写操作都会导致segmentation fault。
2、指针指向非法区域后的写操作。
C语言的指针指向了非法区域,然后对其写入,会带来不可预知后果,最严重的就是程序崩溃,此时也是segmentation fault。

3、常量空间破坏。
比如常量字符串,如果修改其内容,则会出现segmentation fault。

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

在C语言中,任何操作指令都离不开对内存的操作,所以即便编译的时候没有语法操作,但是在实际运行中有可能对内存进行非法操作,这种情况就会产生段错误Segmentation fault (core dumped)!要解决段错误就要先找到段错误的地方。
如何在程序中寻找段错误?
段错误不是语法错误,所以在编译时不会提示出错,只有等到运行时才会提示出现段错误,但是段错误不会提示在哪一行,可以通过printf()函数来寻找段错误位置,只要发生段错误,那么程序就会马上结束。
段错误一般是指针指向有问题,找到段错误的地方最好打印出指针内容看看是不是自己预期的指针内容再进行修改,如果是链表就画图查看自己的链表逻辑有没有出问题
总结解决段错误的步骤:
1.使用printf()函数寻找段错误的地方
2.打印出现段错误的指针,链表或者打开文件目录的返回值看看是不是自己的预期结果
3.根据结果现在修改代码重新编译.
而我最近犯了个愚蠢的错,导致出现段错误,调试了半天。
printf("creating socket ipv4 for listen host %s:%s\n", source_addr, port[0]);
之前我的port是字符串,所以打印时用了%s,port[0]改成uint16_t后忘记改%s,结果报了段错误,还以为是哪个指针出问题了。。。。
改成%hu,就没事了!!!
printf("creating socket ipv4 for listen host %s:%hu\n", source_addr, port[0]);

2463

被折叠的 条评论
为什么被折叠?



