0

我正在尝试制作一个我知道列数为 2 的 3-d 整数数组。我正在使用 malloc 顺序初始化数组。请提出什么问题?

int **output_vertex[2];
for(int j=0;j<4;j++)
    output_vertex[j]= (int **)malloc(sizeof(int **));
output_vertex[1][0]==(int*)malloc(2*sizeof(int));
output_vertex[1][0][0] =11;
//also tried  *output_vertex[1][0] =11;
4

2 回答 2

1

您拥有的数组声明不是您想要的。您有一个指向 int 指针的两元素指针数组。这个页面是阅读这些声明的好指南。

就个人而言,我更喜欢使用 typedef 并从头开始构建这样的复杂类型:

typedef int[2] element_type; // this is the 2-element array of ints
typedef element_type* inner_type; // this is the array of unknown size
typedef inner_type[5] outer_type; // this is the actual type we want to use

outer_type output_vertex; // we now have an array of 5 inner_type variables on the stack
// The output_vertex is *uninitialized* so we have to initialize each of its elements
for (int i=0; i < 5; ++i) {
    output_vertex[i] = new inner_type[SOME_SIZE];
}
// do stuff with output_vertex now that it's initialized
// then, to prevent memory leaks, delete the memory you allocated
for (int i=0; i < 5; ++i) {
    delete[] output_vertex[i];
}

可能有一些方法可以简化,但这应该是一个开始。

如果您希望它inner_type是可附加的,我强烈建议您使用std::vector而不是原始数组。原始数组需要做很多簿记工作,所以我不会举一个例子;但是,这或多或少是您将要做的事情std::vector

typedef std::pair<int,int> element_type; // this is the 2-element array of ints as a pair
typedef std::vector<element_type> inner_type; // dynamic vector this time

inner_type output_vertex[5]; // we now have an array of 5 inner_type variables on the stack
// do stuff with output_vertex

std::vector与动态分配的数组一样快,但您不必自己做任何簿记。您还具有不需要管理尽可能多的堆分配对象的好处。

请注意,原始数组与容器(例如 )不兼容std::vector,所以我std::pair在这里改用。

如果您能够使用 C++11(或 boost),并且需要一个包含两个以上项目的固定大小数组,可以放入标准容器中,请使用std::array.

于 2012-10-14T16:39:00.760 回答
1

我在理解您的错误是什么(或您指的是哪个错误)时遇到了一些麻烦。首先我不知道你为什么要静态创建一个数组然后使用malloc。其次,我不明白你为什么要四次迭代你的 for 循环(0、1、2、3)。你的分配不应该是这样的:

int **output_vertex;
output_vertex = (int **)malloc(2*(sizeof(int **)));
于 2012-10-14T02:20:56.487 回答