为什么此程序输出: 分段错误:11
#include <iostream>
using namespace std;
int main(){
int **a = (int**)new int[10][3];
a[0][0] = 1; a[0][1] = 2; a[0][2] = 3;
cout << a[0][0] << "," << a[0][1] << "," << a[0][2];
return 0;
}
答案 0 :(得分:1)
更改此声明
int **a = (int**)new int[10][3];
到
int ( *a )[3] = new int[10][3];
否则运算符new返回的指针int **
和int ( *a )[3]
不兼容。
问题是,当a[0]
具有类型a
时,在表达式int **
中,编译器会尝试将已分配的非初始化内存读取为类型为{{1}的指针的有效值}。
此外,您应该删除程序末尾的指针
int *
另一种方法是以下
delete [] a;
在这种情况下,分配的内存以下列方式释放
int **a = new int * [10];
for ( size_t i = 0; i < 10; i++ ) a[i] = new int[3];