为什么我的程序直接崩溃

时间:2018-03-24 13:51:35

标签: c

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;时,此程序将崩溃。

我不知道为什么。

2 个答案:

答案 0 :(得分:2)

tree的类型为struct tnode *tree t[n];t声明为指向nstruct 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;
}