当从new int [10] [3]返回到int **指针时,使用它的程序输出:Segmentation fault:11?

时间:2016-09-08 14:55:23

标签: c++ arrays pointers multidimensional-array

为什么此程序输出: 分段错误: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;
}

1 个答案:

答案 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];