为什么我在初始化时会收到以下错误?

时间:2015-12-08 13:06:04

标签: c++ arrays dynamic multidimensional-array initialization

我的主要代码中有这个, 由于初始化中的数据太多,它会给出错误。 我无法改变int **的短语。如何初始化它?

int** points = { { 3, 6, 1, 4 }, { 17, 15, 1, 4 }, { 13, 15, 1, 4 }, { 6, 12, 1, 4 },
{ 9, 1 ,1,4}, { 2, 7,1,4 }, { 10, 19,1,4 } };

提前谢谢

2 个答案:

答案 0 :(得分:1)

看起来你想要的是以下内容:)

int **points = new int *[7] 
{ 
    new int[4] {  3,  6, 1, 4 }, new int[4] { 17, 15, 1, 4 }, new int[4] { 13, 15, 1, 4 }, 
    new int[4] {  6, 12, 1, 4 }, new int[4] {  9,  1, 1, 4 }, new int[4] {  2,  7, 1, 4 }, 
    new int[4] { 10, 19, 1, 4 } 
};

考虑到在不再需要数组时需要显式释放所有已分配的内存。

例如

for ( size_t i = 0; i < 7; i++ ) delete [] points[i];
delete [] points;

您还可以使用声明为

的指针
int ( *points )[4];

在这种情况下,你确实可以动态分配一个二维数组。

答案 1 :(得分:0)

如果必须保留points指向指针的指针,可以像这样初始化它:

// Construct the individual sub-arrays for the nested dimension
int pt0[] = {  3,  6, 1, 4 };
int pt1[] = { 17, 15, 1, 4 };
int pt2[] = { 13, 15, 1, 4 };
int pt3[] = {  6, 12, 1, 4 };
int pt4[] = {  9,  1, 1, 4 };
int pt5[] = {  2,  7, 1, 4 };
int pt6[] = { 10, 19, 1, 4 };
// Construct an array of pointers
int* pts[] = { pt0, pt1, pt2, pt3, pt4, pt5, pt6 };
// Convert an array of pointers to a double-pointer
int** points = pts;

这假定静态初始化上下文(例如全局变量)。如果上下文不是静态的,则必须将points限制在它指向的内部数组的范围内。例如,您无法从函数返回points

如果要从函数返回指针,可以使用static,如下所示:

static int pt0[] = {  3,  6, 1, 4 };
static int pt1[] = { 17, 15, 1, 4 };
...
static int* pts[] = { pt0, pt1, ... };
int** points = pts; // no "static" here
...
return points;

但请注意,每次调用该函数时,该函数都将返回相同的指针。