分段故障

51k*_*51k 0 c++ stl segmentation-fault

试图跟踪,但没有找到以下代码在VC++中给出"访问冲突"的原因,以及gcc中的分段错误.

#include <vector>
#include <iostream>
using namespace std;

typedef struct node
{
    std::string data;
    vector <struct node*> child;
}NODE, *PNODE;

int main()
{
    PNODE head;
    head = (PNODE) malloc(sizeof(NODE));

    head->data.assign("hi");

    printf("data %s", head->data.c_str());
    getchar();
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*nze 12

为什么你认为它应该工作?您使用malloc而不是new,因此不会调用构造函数,并且您执行的所有操作都会访问未初始化的内存.


NPE*_*NPE 5

使用new而不是malloc在堆上创建C++对象.

下列:

head = (PNODE) malloc(sizeof(NODE));
Run Code Online (Sandbox Code Playgroud)

应该读

head = new NODE;
Run Code Online (Sandbox Code Playgroud)

malloc()这里不起作用的原因是它不调用对象构造函数.