为何if语句会导致段错误?GDB调试显示结果仍异常
问题定位与修复方案
嘿,我一眼就揪出了你代码里导致段错误的元凶——就是这行:
max_len = 0;
你想啊,max_len是个int*类型的指针参数,你直接给它赋值0,等于把这个指针硬改成了空指针(指向内存地址0)。之前GDB看if(root == NULL)没问题,是因为root的检查确实正常,但这个max_len的赋值错误是个隐藏坑,等后面代码尝试通过*max_len去读写最长单词长度的时候,就会触发段错误——毕竟你在访问不允许碰的内存区域嘛。
怎么修复?
你要改的是指针指向的内存里的值,而不是指针本身,所以应该写成:
*max_len = 0;
这样才是把max_len指向的那个int变量初始化为0,而不是把指针本身废掉。
另外还要提醒你:调用这个函数的时候,一定要传入有效的指针——比如指向一个已经声明好的int变量,而不是NULL。比如这么调用就没问题:
int longest_word_len; read_file(my_file, trie_root, &longest_word_len);
这样函数里通过*max_len就能正确修改这个变量的值,不会再踩段错误的坑了。
内容的提问来源于stack exchange,提问作者dumbitdownjr
相关产品推荐
相关产品推荐

