我的程序将给定的前n个斐波那契数列中的奇数和偶数分别保存在链接列表中。它在C中。
分配头节点时,出现运行时错误,已停止响应。我找不到问题所在。甚至可能是我不确定的其他事情。
提前致谢
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);
}
最佳答案
我不知道为什么您没有设置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
,您应该在函数中显式设置它们,否则您将具有未定义的行为。如果具有自动存储期限的对象未显式初始化,则其值不确定。
如果具有静态存储持续时间的对象未初始化
明确地,然后:
如果具有指针类型,则将其初始化为空指针;如果有
算术类型,它初始化为(正数或无符号)零;如果
它是一个聚合,每个成员都被初始化(递归)
根据这些规则;如果是成员,则第一个命名成员是
根据这些规则初始化(递归)。
关于c - 链表斐波那契序列运行时错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36991219/