在C ++中复制数组的麻烦

时间:2013-09-03 03:06:12

标签: c++

我在C ++中复制一个数组,这里是代码:

int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *source = arr1;
size_t sz = sizeof(arr1) / sizeof(*arr1); // number of elements
int *dest = new int[sz];                // uninitialized elements
while (source != arr1 + sz)
    *dest++ = *source++; //  copy element and increment pointers

int *p = dest;
while (p != dest + sz) {
    cout << *p++ << endl;
}

运行上述代码后,我得到了:

714124054
51734
9647968
9639960
0
0
0
0
0
0

麻烦是什么?

2 个答案:

答案 0 :(得分:5)

但是,正确地复制数组,通过递增dest,您将失去实际开始。

您需要保留dest的副本以便在其后循环。另外,请不要忘记在分配内存后释放内存。

最后,在C ++中,您可能希望使用std::vector代替以透明方式完成所有这些操作的数组,同时交换最低性能。

int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *source = arr1;
size_t sz = sizeof(arr1) / sizeof(*arr1); // number of elements
int *dest = new int[sz];                // uninitialized elements
int *d = dest;
while (source != arr1 + sz)
    *d++ = *source++; //  copy element and increment pointers

int *p = dest;
while (p != dest + sz) {
    cout << *p++ << endl;
}

[...]
delete[] dest;

答案 1 :(得分:0)

在while循环中int *dest = new int[sz];之后,起始指针不会与*dest++一起保存,因此输出超出了数组的范围。

修订后的代码:

int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *source = arr1;
size_t sz = sizeof(arr1) / sizeof(*arr1); // number of elements
int *dest = new int[sz];                // uninitialized elements
int *temp_dest = dest;
while (source != arr1 + sz)
    *temp_dest++ = *source++; //  copy element and increment pointers

int *p = dest;
while (p != dest + sz) {
    cout << *p++ << endl;
}