我有一个项目,我必须定义一个不同维度的数组(例如三角形(,因为不允许我使用std :: vector :: vector或其他容器类。为此,我正在使用一系列指针。通常,我会这样做:
int* triangle[n];
for(int i = 0; i < n; i++) {
triangle[i] = new int[i + 1];
for(int j = 0; j <= i; j++) cin >> triangle[i][j];
}
但是我不得使用动态内存!我以为做
int* triangle[n];
for(int i = 0; i < n; i++) {
int row[i + 1];
triangle[i] = row;
for(int j = 0; j <= i; j++) cin >> triangle[i][j];
}
会解决问题。但事实并非如此。取而代之的是,当我迭代阵列并打印内容时,我会得到垃圾。那么,如何用静态分配替换动态分配?
因此,如果您要简化"数组"数组,您的选择是阵列线性化。这意味着,您应该声明70个元素的单个数组,而不是7个10个项目的7个数组。然后,只需通过一个函数更改嵌套索引,该函数可以计算出线性化数组的变化,而Viola!
在这里您可以找到这样一个示例:如何将矩阵的索引映射到1维数组(C (?
如果您不知道您的数组多长时间,那么确定初步预订尺寸可能是一个艰难的选择(例如,诸如向量的STL容器等然后将容器生长至自由容量,然后重新分配更大的块,将数据从旧缓冲区移动到新的缓冲区,一次又一次,一次又一次...(
正如@BeyElerStudios在评论中指出的,在for循环的末尾,分配的row
数组分配的内存被释放了。当我试图打印出内容时,我正在将指针释放到这种释放的记忆中,因此我正在垃圾。谢谢!