从一个动态分配数组复制到另一个c++
Copying from One Dynamically Allocated Array to Another C++
这似乎应该有一个超级简单的解决方案,但我就是想不出来。我只是创建一个调整大小的数组,并尝试复制所有原始值,然后最后删除旧数组以释放内存。
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;
相关文章:
- 在数组中使用C++中的哈希表复制数组中的元素
- 快速复制数组到阵列
- 如何在C 中复制数组
- 赋值运算符复制数组中除可用空间之外的所有内容
- 尝试复制数组时从 DLL 调用函数时程序崩溃
- 反向复制数组
- 复制数组 - 将数组加倍后崩溃
- 复制数组和气泡排序 C++
- 在结构中复制构造函数:是否复制数组
- 如何从类中复制数组并将新数组的大小加倍
- 在C++中复制数组的麻烦
- 逐行复制数组的内容
- tictactoe和复制数组
- 正在使用数组的名称strring复制数组
- c++复制数组到数组
- . net互操作是来回复制数组数据,还是固定数组?
- 从通过函数发送的结构体中复制数组
- 使用CUDA Thrust置换迭代器复制数组的特定元素
- C/ c++中有复制数组的函数吗?
- 在引用中复制数组