学弟跑B+树的测试遇到一个奇怪的段错误,出现在一个访问char**数组的时候,这个数组存储B+Tree的key,空间确实是已经初始化了,也确实打印了不是空指针,但是一访问就出错
访问key key数组确实是初始化过了
用gdb跑了一下,发现出错在__strlen_avx2 ()这个地方
__strlen_avx2 ()错误
然后搜这个问题发现一个出现这个问题的原因,其中一条就是使用了没有'\n'结束的字符串
segmentfault上的解答
然后看函数定义,发现InsertIndex函数接收参数是string类型,而传入的是char类型,这里就会要求做一个强制的类型转换,但是问题在于这个char没有\n结尾,有没有传入char*的长度,所以就会出现这个问题。
所以char*和string混用的时候害得注意一下,以及再次怀念一下rust的类型检查
网友评论