You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何正确传递双指针到函数?螺旋矩阵IV代码崩溃求助

问题分析与解决

崩溃的直接原因是**returnColumnSizes参数未正确初始化**,导致解引用*returnColumnSizes时访问了非法内存。

你的错误点

  1. 调用spiralMatrix时参数传递完全错误:
    函数的第五个参数returnColumnSizes是二级指针,作用是让函数把分配好的列数数组地址回传给调用者。你现在把用来接收返回矩阵的vale传进去,混淆了参数用途,且该参数未指向有效内存地址。
  2. 对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:45:32