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

Rah*_*aki 6 c++ memory dynamic-arrays

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*lia 10

请记住,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;
}
Run Code Online (Sandbox Code Playgroud)

或者对指针的引用:

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;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,对于数组大小,你应该使用std::size_tfrom <cstddef>- 来保证保持任何对象的大小,并明确我们正在处理对象的大小.