The signal is caused by a READ memory access.
排查几点问题:
- (高频)越界,数组引用超越了左右边界
- 无限递归,代码无法正常结束返回
- (高频)函数入参及出参返回处理错误
排查可能问题一:越界,数组引用超越了左右边界
主要有两个思路:
1、先分配足够大的空间试试,看看是不是空间问题
2、在可能越界的地方提前打印下标值,看是否溢出。因为地址消毒是在运行时中断,可以用printf打印中止前的情况。
方法1:
在每处可能越界引用处,提前打印下标,记录程序崩溃前打印的下标系数
打印代码示例如下:
printf("index = %d\n", index);
方法2:
在数组分配空间初始化时,强行分配足够大的空间,确保空间足够
如果加大空间后,没有报错,则说明肯定是数组引用越界问题
运行代码后,发现下标打印是正常的,没有发现问题,于是继续排查可能问题二。
排查可能问题二:无限递归,代码无法正常结束返回
直接在递归函数backtrack的终止条件里打印输出记录
观察是否按预期的递归方式进行递归
如果没有任何打印记录,则说明函数没有终止,一直在无限递归
运行代码后,发现无该问题。
排查可能问题三:函数入参及出参返回处理错误
仔细阅读代码首行输入输出说明以及对比网上C代码实现后,发现输出参数理解有误。
变量二级指针returnColumnSizes保存的是每行输出的列数,虽然题目中的是固定列数,但需要赋值成相应的列数。而我最开始理解成了这个是二维数组的返回指针。
二维数组的返回指针是通过函数返回参数来传递的,直接return分配的二维数组首地址即可。
————————————————
版权声明:本文为CSDN博主「来知晓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_17256689/article/details/118489525