gpt4 book ai didi

c - 在数据结构中使用数组成员

转载 作者:行者123 更新时间:2023-11-30 20:38:15 25 4
gpt4 key购买 nike

我有以下数据结构:

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;
}

我的代码编译时没有任何警告,但是当我运行时,它崩溃了。当我调试时,我在用“段错误”注释的行处出现段错误。知道我做错了什么吗?谢谢。

最佳答案

您的代码有很多问题。指出其中一些

  1. 数组索引

    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) 会怎么样?永远不会成为真实?

  • 如果出现

    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()的返回值和家人。

    关于c - 在数据结构中使用数组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29858135/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com