我的程序在给定的前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);
}
答案 0 :(得分:0)
我不知道为什么你没有设置evenCount
和oddCount
,但是如果它们大于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;
};
所以同样的问题也适用,在分配之前你不能取消引用它们。
关于evenCount
和oddCount
,您应该在函数中明确设置它们,或者您有未定义的行为。
如果没有显式初始化具有自动存储持续时间的对象,则其值是不确定的。
如果未初始化具有静态存储持续时间的对象 明确地说:
如果它有指针类型,则将其初始化为空指针;如果有的话 算术类型,初始化为(正或无符号)零;如果 它是一个聚合,每个成员都被初始化(递归) 根据这些规则;如果它是aunion,第一个命名的成员是 根据这些规则初始化(递归)。