这似乎应该有一个 super 简单的解决方案,但我就是想不通。我只是创建一个调整大小的数组并尝试复制所有原始值,然后最后删除旧数组以释放内存。
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]
是通过引用而不是值来复制值,因为在调整大小后打印 orig 会返回一堆垃圾值,除非我注释掉delete [] orig
。我怎样才能从 orig 到 resized 的深拷贝,或者我还面临其他一些问题吗?我不想使用 std::vector。
最佳答案
请记住,C++ 中的参数是按值传递的。您将 resized
分配给传递给您的指针的 copy,函数外部的指针保持不变。
您应该使用双间接(或“双指针”,即指向 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;
}
顺便说一下,对于数组大小,您应该使用
中的类型 std::size_t
- 它可以保证保持任何对象的大小并使得很清楚我们正在处理对象的大小。
关于c++ - 从一个动态分配的数组复制到另一个 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8056746/