我有点迷失了以下代码:
T_TERM_LIST term_list = term_list_one($1);
term_list = term_list_add(term_list, $3);
T_TERM term_equality = term_app(str_make("="), term_list);
T_TERM_LIST term_list_2 = term_list_one(term_equality);
$$ = term_app(str_make("not"), term_list_2);
printf("\n100 \n");
我的问题是关于最后一行,如果我离开printf语句它按预期工作,否则如果我删除printf行我得到一个空指针异常,我想在那里找到什么是ging。
作为添加信息的问题,使用的数据类型是unsigned的typedef和unsigned的列表。
此外,代码嵌入到YACC文件中,该文件可以解释共享代码段中的符号$ n。
答案 0 :(得分:0)
正如@chux建议我复制&粘贴我的评论作为我的问题的答案。实际上这是一种经验教训。
我发现make make编译的代码; make与make clean编译的代码不同; make debug,它会添加所有调试标志。前者的结果是预期的,而空指针引用是在后一种情况下获得的。所以我认为我们可以通过指出使用valgring和gdb来解决我提出的问题是一个很好的选择。
非常感谢!