链表Fibonacci序列运行时错误

时间:2016-05-02 20:35:44

标签: c data-structures linked-list fibonacci

我的程序在给定的前n个Fibonacci序列中的链表中单独保存奇数和偶数。它在C。

分配Head节点时,我收到运行时错误,Stopped Responding。我无法找到问题所在。它甚至可能是我不确定的其他事情。

提前致谢

struct odd{
       int value;
       struct odd * next;
};

struct even{
       int value;
       struct even * next;
};

struct list{

       struct odd * oHead;
       struct odd * oCurrent;

       struct even * eHead;
       struct even * eCurrent;
};

typedef struct list * List;

void init(int i, List fib){ // allocates the linked list according to first i numbers of the Fibonacci sequence

     int evenCount;
     int oddCount;
     int j;

     /*Calculates the count of even and odd numbers */

     for( j = 0 ; j < evenCount ; j++){
           if(j == 0){
                    **fib->eHead->next = (struct even*)malloc(sizeof(struct even));**
                    fib->eCurrent = fib->eHead->next;
           }
           else{
                fib->eCurrent->next = (struct even*)malloc(sizeof(struct even));
                fib->eCurrent = fib->eCurrent->next;
           }
     }
     for( j = 0 ; j < oddCount ; j++){
           if(j == 0){
                    **fib->oHead->next = (struct odd*)malloc(sizeof(struct odd));**
                    fib->oCurrent = fib->oHead->next;

           }
           else{
               fib->oCurrent->next = (struct odd*)malloc(sizeof(struct odd));
               fib->oCurrent = fib->oCurrent->next;
           }
     }
}

main(){
   List fib
   init(15,fib);
}

1 个答案:

答案 0 :(得分:0)

我不知道为什么你没有设置evenCountoddCount,但是如果它们大于0那么这一行

fib->eHead

取消引用一个NULL指针。以下行不是初始化

List fib;

这是一个指向尚未初始化的List对象的指针的声明。如果你的typedef是......

typedef struct list List;

它会初始化堆栈上的空结构,但这不是你正在做的事情。如果您确实更改了类型声明,那么您仍然在使用

中的指针
struct list{
       struct odd * oHead;
       struct odd * oCurrent;
       struct even * eHead;
       struct even * eCurrent;
};

所以同样的问题也适用,在分配之前你不能取消引用它们。

关于evenCountoddCount,您应该在函数中明确设置它们,或者您有未定义的行为。

  

如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。

     

如果未初始化具有静态存储持续时间的对象   明确地说:

     

如果它有指针类型,则将其初始化为空指针;如果有的话   算术类型,初始化为(正或无符号)零;如果   它是一个聚合,每个成员都被初始化(递归)   根据这些规则;如果它是aunion,第一个命名的成员是   根据这些规则初始化(递归)。