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);
我知道在第一种情况下我们有动态分配内存的分段错误的原因。 然后我们尝试使用未分配的内存。 在第二种情况下,我们使用堆栈内存。 你能更清楚地解释一下吗? 对于质疑的疑惑,我是新手
答案 0 :(得分:4)
使用new
代替malloc
。
使用malloc
时未调用结构的默认构造函数,然后vector
未初始化。
由于vector是一个带有non-trivial constructor的类,所以struct有一个非平凡的构造函数,它不能被忽略。
请记住在使用后删除指针以避免内存泄漏。
答案 1 :(得分:0)
马特说的话。
不仅没有初始化向量,而且struct的内存区域也没有被malloc设置为任何东西。你甚至不能指望它被清零,它将是那个记忆区域的先前用户放在那里。
struct node *t( new struct node );