我有以下数据结构:
typedef struct node
{
int key;
int *v;
}node;
......和全局变量:
node *multiway[10];
int contor=0;
我试图在这个结构中插入多路树的所有节点,以及每个节点的所有孩子。为此,我做了这个功能:
int * getKids(int value,int n) //returneaza vectorul de copii ai unui nod
{
//value-nodul parinte
//n- numarul de noduri ale vectorului
int *result=(int*)malloc(n*sizeof(int));
int counter=0;
int i;
for(i=1;i<=n;i++)
{
if(a[i]==value)
{
counter++;
result[counter]=i;
printf("%d ",result[counter]);
}
}
int copii[counter]; //in vector pun toti copiii valorii date, value
for(i=1;i<=counter;i++)
{
copii[i]=result[i];
}
contor++;
multiway[contor]=(node*)malloc(sizeof(node)); //added this line after a comment
multiway[contor]->key=value; //SEGMENTATION FAULT
multiway[contor]->v=copii;
return result;
}
我的代码编译时没有任何警告,但是当我运行时,它会崩溃。当我调试时,我在线路上得到了一个分段错误,我评论了#34;分段故障&#34;。知道我做错了什么吗?谢谢。
答案 0 :(得分:0)
您的代码存在许多问题。指出其中一些
数组索引
for(i=1;i<=n;i++)
{
if(a[i]==value)
c
中的数组具有基于0
的索引。所以,基本上它应该是for(i=0;i< n;i++)
。您也没有告诉我们a
是什么。
如果是
int copii[counter];
如果if(a[i]==value)
永远不会变为TRUE,该怎么办?
如果是
multiway[contor]->key=value; //SEGMENTATION FAULT
multiway[contor]->v=copii;
如果contor
超过9
怎么办?你将超越记忆。
函数局部变量的生命周期直到函数完成执行。功能完成后,该变量将不再存在。尝试访问该变量会产生undefined behavior。
multiway[contor]->v=copii;
在上述情况中,copii
是getKids()
的本地,getKids()
完成执行后,尝试访问multiway[contor]->v
将导致UB。
注意:Do not cast malloc()
和家人的返回值。