且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

程序收到信号SIGSEGV,分段故障.C ++清单

更新时间:2022-10-15 16:54:57

一个可能导致分段错误的问题是在Microsoft中错误地使用了 malloc free 一个C ++程序来动态创建对象.

此结构:

  struct节点{字符串数据;struct节点* next;}; 

,然后再执行此操作的代码:

nPtr =(nodePtr)malloc(sizeof(node));

不创建 node 对象,因为未调用 node 的构造函数,因此未创建 std :: string 的默认构造函数调用.

所有 malloc 所做的只是分配 sizeof(node)个字节-实际上没有创建 node 对象.现在,您剩下的只是一堆分配的字节,它们根本不构成任何类型的 node 对象.对 nPtr 的任何使用,就好像它是一个有效的对象一样,都会调用未定义的行为.

使用 new delete ,而不是 malloc free ,因为 new 会调用对象的构造函数,而 malloc 不会,并且 delete 会调用析构函数,而 free 不会.>

因此,用以下命令替换您现在正在执行的 malloc free 调用(当然,在必要时更改变量的名称):

nPtr =新节点;

然后完成:

删除nPtr;