我正在尝试创建一个3维整数数组,我知道列数为2。 我正在使用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;
答案 0 :(得分:1)
我在理解您的错误(或者您指的是哪一个)时遇到了一些麻烦。首先,我不知道为什么你静态创建一个数组,然后使用malloc。其次,我不明白你为什么要四次迭代你的for循环(0,1,2,3)。你的分配不应该是这样的:
int **output_vertex;
output_vertex = (int **)malloc(2*(sizeof(int **)));
答案 1 :(得分:1)
您拥有的数组声明不是您想要的。你有一个指向int指针的两元素指针数组。 This page是阅读这些声明的好指南。
就个人而言,我更喜欢使用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
。