为什么这个程序输出:段错误: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;
}
修改此声明
int **a = (int**)new int[10][3];
int ( *a )[3] = new int[10][3];
否则,操作符new返回的指针int **
和int ( *a )[3]
不兼容。
问题是,在表达式a[0]
时,a
具有类型int **
,编译器试图读取分配的未初始化内存作为类型int *
的指针的有效值。
还应该删除程序末尾的指针
delete [] a;
另一种方法是如下
int **a = new int * [10];
for ( size_t i = 0; i < 10; i++ ) a[i] = new int[3];
在这种情况下,分配的内存按以下方式释放
for ( size_t i = 0; i < 10; i++ ) delete [] a[i];
delete [] a;