如果struct的对象是动态创建的,那么我们就无法在向量中推送元素

时间:2014-12-16 14:05:06

标签: c++ vector struct segmentation-fault

struct node
{
    vector<int> v;
};  
//case 1:

struct node *t = (struct node *) malloc(sizeof(struct node));  

t->v.push_back(4);// segmentation fault

//case 2:
struct node t;
t.v.push_back(6);

我知道在第一种情况下我们有动态分配内存的分段错误的原因。 然后我们尝试使用未分配的内存。 在第二种情况下,我们使用堆栈内存。 你能更清楚地解释一下吗? 对于质疑的疑惑,我是新手

2 个答案:

答案 0 :(得分:4)

使用new代替malloc

使用malloc时未调用结构的默认构造函数,然后vector未初始化。

由于vector是一个带有non-trivial constructor的类,所以struct有一个非平凡的构造函数,它不能被忽略。

请记住在使用后删除指针以避免内存泄漏。

答案 1 :(得分:0)

马特说的话。

不仅没有初始化向量,而且struct的内存区域也没有被malloc设置为任何东西。你甚至不能指望它被清零,它将是那个记忆区域的先前用户放在那里。

 struct node *t( new struct node );