【发布时间】:2014-01-26 09:45:01
【问题描述】:
我正在用 C 编写 List ADT。我是 C 新手,正在尝试将代码从 Java 翻译成 C。但是,当我测试 List ADT 时,我不断遇到分段错误。
当我在 GDB 中调试程序时,出现以下错误:
程序收到信号SIGSEGV,分段错误。 getIndex()中的0x0000000000400be8
然后当我输入命令“where”时,我收到以下消息:
#0 0x0000000000400be8 in getIndex()
#1 0x0000000000400806 in main()
下面的代码是发生错误的方法getIndex():
int getIndex(List L) {
int returnIndex = 0;
if (offEnd(L)) return -1;
else {
NodeRef currIndex = L->curr;
while (currIndex != L->front) {
++returnIndex;
currIndex = currIndex->prev;
}
}
return returnIndex;
}
作为参考,offEnd() 方法和 NodeRef 的结构是:
int offEnd(List L) {
if (L == NULL) {
printf("List Error: Calling offEnd() on NULL List\n");
exit(1);
}
return (L->length == 0);
}
typedef struct Node {
int data;
struct Node* next;
struct Node* prev;
} Node;
typedef Node* NodeRef;
typedef struct ListObj {
NodeRef front;
NodeRef back;
NodeRef curr;
int length;
} ListObj;
NodeRef newNode(int node_data) {
NodeRef N = malloc(sizeof(Node));
N->data = node_data;
N->next = NULL;
N->prev = NULL;
return (N);
}
任何帮助都将不胜感激,因为我是 C 的新手并且正在苦苦挣扎。谢谢。
【问题讨论】:
-
您在哪个操作系统上使用哪个编译器(以及哪个版本)进行编码?
-
List和ListObj一样吗?显示更多代码,尤其是List的定义(例如typedef)... -
-1 因为你没有解释什么是
List.... -
while (currIndex != L->front) {:currIndex是NULL? -
这是一个非常有用的问题,因为我在 FreeBSD 上遇到了这个问题,并通过 Google 找到了这个问题。
标签: c gdb segmentation-fault