添加printf语句时,NULL指针异常消失

时间:2013-12-11 14:46:52

标签: c++ c yacc

我有点迷失了以下代码:

  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。

1 个答案:

答案 0 :(得分:0)

正如@chux建议我复制&粘贴我的评论作为我的问题的答案。实际上这是一种经验教训。

我发现make make编译的代码; make与make clean编译的代码不同; make debug,它会添加所有调试标志。前者的结果是预期的,而空指针引用是在后一种情况下获得的。所以我认为我们可以通过指出使用valgring和gdb来解决我提出的问题是一个很好的选择。

非常感谢!