C++读取XXX位置时发生访问冲突的一种情况

今天在写到如下代码时出现了访问冲突(执行children.push_back()时出现错误):

struct TreeTag
{
    int val;
    vector children;
};
Node newNode(int val)
{
    Node n = (Node)malloc(sizeof(struct TreeTag));

    n->val = val;
    n->children = vector();
    return n;
}

后来查阅了相关资料,发现是因为在利用malloc申请空间时,由于vector是确定了的(即children变量不是指针),所以在分配空间时,虽然给vector本身分配了空间,但是这个空间仅仅是存vector本身,所以在利用push_back方法向vector里面添加元素时,超过了本身分配给vector的大小,此时就会出现访问冲突的错误。
所以在涉及到动态分配内存时,vector也应使用指针,即将上述代码修改为:

struct TreeTag
{
    int val;
    vector* children;
};

Node newNode(int val)
{
    Node n = (Node)malloc(sizeof(struct TreeTag));

    n->val = val;
    n->children = new vector();
    return n;
}

你可能感兴趣的:(C++,malloc,代码问题,C++)