仅用指针实现C++二维数组传参并修复退出码-1073741819报错
问题解决方案
错误原因
你遇到的崩溃属于内存访问违例错误,退出码-1073741819对应Windows平台的段错误,核心问题是类型转换逻辑错误:
C++ 中的静态二维数组
int x[3][2]是连续存储的整块内存,并非由int*指针构成的数组。你将其强制转为int**后,*(x+i)操作会把数组中存储的实际整数值(如11、15等)当做内存地址进行解引用,直接触发非法访问导致程序崩溃。
修改点说明
- 将函数参数从
int** x改为int* x,匹配静态二维数组连续存储的特性,避免使用x[][2]或*x[]形式的数组参数声明 - 元素访问改为手动计算偏移的指针解引用形式,完全不使用
[]索引语法 - 调用函数时将二维数组首地址转为
int*传递,不再使用错误的int**强制转换
可运行代码
#include <iostream> using namespace std; void sum(int *x) { int s = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { cout << *(x + i * 2 + j) << " "; s += *(x + i * 2 + j); } cout << "\n"; } cout << s; } int main() { int x[3][2] = { {11,15},{19,28},{5,8} }; sum((int*)x); return 0; }
运行输出
11 15 19 28 5 8 86
内容的提问来源于stack exchange,提问作者aslam louati
相关产品推荐
相关产品推荐

