typedef int score;
typedef struct tnode *ptrtonode;
typedef ptrtonode tree;
struct tnode{
score s;
tree next;
bool know;
};
scanf("%d",&n);
tree t[n];
for(i=0;i<n;i++){
scanf("%d",&x);
t[i]->s=x;
t[i]->next=NULL;
t[i]->know=false;
}
这是一段代码段。
当它运行&#t; t [i] - &gt; s = x;&#39;时,此程序将崩溃。
我不知道为什么。
答案 0 :(得分:2)
tree
的类型为struct tnode *
。 tree t[n];
将t
声明为指向n
(struct tnode
)的struct tnode *
指针数组。在访问指向它们的内存之前,需要为这些指针分配内存。
答案 1 :(得分:1)
此语句仅保留内存空间。由于在编译时未定义n
,因此数组的内容包含垃圾值。
tree t[n];
对t[i]
的任何访问都将导致您的程序访问内存位置,由t[i]
中存在的值表示,很可能是无效内存位置的地址。这会导致你的崩溃。在其他情况下,它可能会导致程序无关部分的内存损坏,并产生不正确的结果或再次崩溃。
您需要在通过分配节点访问数组元素之前初始化它们。
for(i=0;i<n;i++){
scanf("%d",&x);
t[i] = malloc(sizeof(tnode)); // this was missing.
t[i]->s=x;
t[i]->next=NULL;
t[i]->know=false;
}