【发布时间】:2015-06-13 00:51:05
【问题描述】:
我使用以下结构作为堆的节点
struct Node
{
int k;
}*p,**array;
然后我创建了一个类,它是堆。在我的代码中,我必须在函数中初始化堆,然后执行以下操作
for (int i= 0; i < V;i++)
{
array[i] = newNode(0);
}
函数 newNode() 如下:
struct Node* newNode(int k)
{
struct Node* node;
node->k = k;
return node;
}
问题是,当我调试我的代码时,它会因函数 newNode() 中的分段错误而崩溃,该行是:
node->k = k;
我真的不知道该怎么办:(
【问题讨论】:
-
C++ 有用于在创建对象时初始化对象的构造函数。因此,毕竟你真的不需要
newNode。不过,在newNode()中,您不会分配node。 -
@101010 所以我应该删除函数 newNode 并像这样初始化:array[i]=0;
-
恕我直言,你应该这样做。
-
struct Node* node;在这里你声明了一个指向节点的指针,但是你没有让它指向任何东西。node->k = k;在这里您取消引用该指针,导致 未定义的行为,因为它没有指向任何有效的 Node 对象。 -
在赋值之前不要使用变量的值!