动态分配矩阵在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
相关产品推荐
相关产品推荐

