c++中的段错误(segment fault)
2015-05-08 10:00
330 查看
段错误一般发生在递归导致的栈溢出或这数组溢出,还有就是if语句中可能出错,比如一个链表结构:
且看下面代码:
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };在链表指针指向为空的时候,它就不可能存在val值,这时候,如果你的if中存在p->val就会出现段错误。
且看下面代码:
ListNode* deleteDuplication(ListNode* pHead) { ListNode *pFront=NULL, *pBack=pHead, *pMiddle = NULL; while(pBack!=NULL){ pMiddle = pBack; pBack=pBack->next; if(pBack!=NULL && pBack->val==pMiddle->val){ while(pBack->val==pMiddle->val){ ListNode *pTemp; pTemp = pBack; pBack = pBack->next; delete pTemp; } delete pMiddle; pMiddle = NULL; if(pFront!=NULL) pFront->next = pBack; else{ pHead = pBack; pFront = NULL; } }else{ pFront = pMiddle; } } return pHead; }其中的测试代码为:
ListNode *node6 = new ListNode(4); ListNode *node7 = new ListNode(4); node6->next = node7; ListNode *pTemp = deleteDuplication(node6); getchar();在测试的时候,就会出现段错误,原因是:
if(pBack!=NULL && pBack->val==pMiddle->val){ while(pBack->val==pMiddle->val){ ... }应该为:
if(pBack!=NULL && pBack->val==pMiddle->val){ while(pBack!=NULL && pBack->val==pMiddle->val){ ... }所以段错误一般发生在极端情况的未考虑。
相关文章推荐
- Linux 段错误调试Segment Fault
- 利用linux信号机制调试段错误(Segment fault)【转】
- 段错误(segment fault)的几种原因
- C/C++中的段错误(Segmentation fault)
- 第一时间捕获段错误(segment fault)的详细信息
- C/C++中的段错误(Segmentation fault)[转]
- 一次php脚本出现段错误(Segment fault)的经历
- 用gdb检查段错误(segment fault)
- C/C++中的段错误(Segmentation fault)[转]
- c++ null pointer 导致segment fault
- 用gdb检查段错误(segment fault)
- C/C++中的段错误(Segmentation fault)
- 段错误(Segment fault)使用GDB调试core文件样例
- 用gdb检查段错误(segment fault)
- 利用linux信号机制调试段错误(Segment fault)
- 利用linux信号机制调试段错误(Segment fault)
- linnx内核出现段错误(segment fault)的调试方法
- 嵌入式 使用gdb调试段错误(segment fault)
- C/C++中的段错误(Segmentation fault)
- 第一时间捕获段错误(segment fault)的详细信息