用静态分配替换动态分配

Replace dynamic allocation with a static one

本文关键字:动态分配 替换 分配 静态      更新时间:2023-10-16

我有一个项目,我必须定义一个不同维度的数组(例如三角形(,因为不允许我使用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数组分配的内存被释放了。当我试图打印出内容时,我正在将指针释放到这种释放的记忆中,因此我正在垃圾。谢谢!