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

时间:2015-04-24 21:52:16

标签: c

我有以下数据结构:

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;。知道我做错了什么吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码存在许多问题。指出其中一些

  1. 数组索引

    for(i=1;i<=n;i++)
    {
        if(a[i]==value)
    
  2. c中的

    数组具有基于0的索引。所以,基本上它应该是for(i=0;i< n;i++)。您也没有告诉我们a是什么。

    1. 如果是

      int copii[counter];
      
    2. 如果if(a[i]==value)永远不会变为TRUE,该怎么办?

      1. 如果是

        multiway[contor]->key=value; //SEGMENTATION FAULT
        multiway[contor]->v=copii;
        
      2. 如果contor超过9怎么办?你将超越记忆。

        1. 函数局部变量的生命周期直到函数完成执行。功能完成后,该变量将不再存在。尝试访问该变量会产生undefined behavior

          multiway[contor]->v=copii;
          
        2. 在上述情况中,copiigetKids()的本地,getKids()完成执行后,尝试访问multiway[contor]->v将导致UB。

          注意:Do not cast malloc()和家人的返回值。