从一个动态分配数组复制到另一个c++

Copying from One Dynamically Allocated Array to Another C++

本文关键字:复制 数组 另一个 c++ 动态分配 一个      更新时间:2023-10-16

这似乎应该有一个超级简单的解决方案,但我就是想不出来。我只是创建一个调整大小的数组,并尝试复制所有原始值,然后最后删除旧数组以释放内存。

void ResizeArray(int *orig, int size) {
    int *resized = new int[size * 2]; 
    for (int i = 0; i < size; i ++)
        resized[i] = orig[i];
    delete [] orig;
    orig = resized;
}

这里发生的事情似乎是resized[i] = orig[i]通过引用而不是值复制值,因为在调整大小后打印原始文件返回一堆垃圾值,除非我注释掉delete [] orig。我如何从原始文件复制到调整大小,还是我遇到了其他问题?我不想使用std::vector.

请记住,c++中的参数是按值传递的。您正在分配resized给传递给您的指针的副本,函数外部的指针保持不变。

您应该使用双间接(或"双指针",即指向指向int的指针的指针):

void ResizeArray(int **orig, int size) {
    int *resized = new int[size * 2]; 
    for (int i = 0; i < size; i ++)
        resized[i] = (*orig)[i];
    delete [] *orig;
    *orig = resized;
}

或对指针的引用:

void ResizeArray(int *&orig, int size) {
    int *resized = new int[size * 2]; 
    for (int i = 0; i < size; i ++)
        resized[i] = orig[i];
    delete [] orig;
    orig = resized;
}
顺便说一下,对于数组大小,你应该使用<cstddef>中的std::size_t类型——它保证保存任何对象的大小,并明确我们正在处理对象的大小。

我强烈建议用std::vector<int>替换数组。

这个数据结构将根据需要调整大小。

orig必须是指向指针的指针才能赋值给resized:

int **orig;
*orig = resized;