C语言如何正确传递双指针到函数?螺旋矩阵IV代码崩溃求助
问题分析与解决
崩溃的直接原因是**returnColumnSizes参数未正确初始化**,导致解引用*returnColumnSizes时访问了非法内存。
你的错误点
- 调用
spiralMatrix时参数传递完全错误:
函数的第五个参数returnColumnSizes是二级指针,作用是让函数把分配好的列数数组地址回传给调用者。你现在把用来接收返回矩阵的vale传进去,混淆了参数用途,且该参数未指向有效内存地址。 - 对LeetCode这类题目的参数逻辑理解偏差:
returnSize用来返回矩阵行数,returnColumnSizes用来返回每行的列数(本题每行列数都是n),这两个都是需要调用者提供可写指针的输出参数,不是用来传矩阵指针的。
修正步骤
1. 修正调用代码
单独定义变量接收输出参数,把它们的地址传给函数,不要用vale乱传:
int* cols = NULL; int return_size; int** vale = spiralMatrix(m, n, Lista, &return_size, &cols);
&return_size传给returnSize,让函数把行数m写入return_size&cols传给returnColumnSizes,让函数把分配好的列数数组地址写入cols
2. 完善spiralMatrix内的列数赋值
分配完列数数组后,要给每个元素赋值为n(本题是m行n列矩阵,每行列数一致):
*returnSize = m; *returnColumnSizes = (int*)malloc(m * sizeof(int)); // 给每一行的列数赋值 for (int i = 0; i < m; i++) { (*returnColumnSizes)[i] = n; } int** res = (int**)malloc(m * sizeof(int*)); // 后续继续分配每行内存并填充螺旋矩阵...
3. 移除多余的提前分配
你之前提前分配的vale完全没必要,spiralMatrix内部会自行分配矩阵内存并返回,直接接收返回值即可。
补充说明
LeetCode这类二维数组返回题的参数逻辑是固定的:
returnSize:输出参数,返回二维数组行数returnColumnSizes:输出参数,返回数组,每个元素对应二维数组每行的列数
函数返回分配好的二维数组指针,调用者只需接收返回值,同时通过两个输出参数获取数组维度信息。
内容的提问来源于stack exchange,提问作者border_crosser
相关产品推荐
相关产品推荐

