我正在创建双链表,列表中的每个条目都可以包含其他列表。
结构:
struct symTabEntry {
char *name;
symTabEntry *scope;
symTabEntry *head;
symTabEntry *vader;
symTabEntry *next;
symTabEntry *prev;
};
指向特定元素的指示:
symTabEntry **currentHead; //Points to the head of the current scope
symTabEntry **currentVader; //Points to the vader head element of the current scope
由于我正在使用utlist.h库,因此我总是必须提供指针,该指针是我正在处理的列表的head元素,用于添加条目或迭代所有条目。
问题是当我添加一个条目时我想切换到当前条目的范围并在新范围内添加下一个条目,然后尝试输出子视图元素的vader,我得到一个分割故障。作为参数提供的vader元素是最新添加的条目,并且新条目始终添加到currentHead。
切换范围的功能:
void newFunctionScope(symTabEntry *vader) {
currentVader = &vader;
currentHead = &vader->scope;
}
访问foundEntry-> vader:
时出错void printSymboltable(symTabEntry *entry) {
symTabEntry *foundEntry;
DL_FOREACH(entry, foundEntry) {
printf("%s\t%d\t%d\t%d\t%s\t%s", foundEntry->name, foundEntry->line, foundEntry->offset, foundEntry->parameter, types[foundEntry->type], types[foundEntry->internType]);
if(foundEntry->vader != NULL) {
printf("\t%s\n", foundEntry->vader->name);
}
else {
printf("\n");
}
if(foundEntry->scope != NULL) {
printSymboltable(foundEntry->scope);
}
}
}
完整源代码: http://pastebin.com/nNp98i3e
或其他任何建议?
感谢您的帮助!