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

动态分配矩阵在void函数中地址异常及赋值报错问题

指针数组构建矩阵的两个问题原因解析

1. get_address函数输出地址差异的原因

核心问题是函数参数传递或参数匹配错误:

  • 若get_address函数按值接收指针数组(比如声明为void get_address(int* mat[], int rows, int cols)),这里的mat是原指针数组的副本(退化为int**类型)。如果allocation函数通过二级指针/引用修改了主函数的指针数组,但get_address调用时传递的行列数和主函数不一致,循环会越界访问不属于矩阵的内存,输出错误地址。
  • 另一种可能是get_address内部循环逻辑看似和主函数一致,实际存在细节偏差:比如误将&mat[i](行指针的地址)当成&mat[i][j](元素地址)输出,自然和主函数结果不同。

2. assign_number函数触发EXC_BAD_ACCESS的原因

这个错误是访问了空指针或无效内存,常见原因有两个:

  • 外层指针数组未正确分配:如果allocation函数没有用二级指针或引用传递主函数的指针数组,只是在函数内部修改了副本的地址,主函数里的mat仍然是空指针NULL,调用assign_number时访问mat[i][j]就会触发空指针错误。
  • 内层行内存未分配:allocation仅分配了外层的指针数组(mat = new int*[rows]),但没有给每一行分配int类型的数组(mat[i] = new int[cols]),导致mat[i]是野指针,赋值时访问无效内存。

内容的提问来源于stack exchange,提问作者leeway00

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:22:56