更新时间: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;