我做了一个动态数组的动态副本,副本中的元素没有完全输出,而且有些数字的打印格式不对。
我的代码:
// the function which outputs the elements of the array
void array_transform (double* num_array_1) {
for (int i = 0; i < sizeof(num_array_1); i++)
{
cout << num_array_1[i] << endl;
}
// the code creating the copy
double* num_array_1 = new double[n];
memcpy(num_array_1, num_array, 4 * n);
原始数组元素:
Array elements:
i 1 2 3 4 5 6 7 8 9 10
Number 42 68 35 1 70 25 79 59 63 65
拷贝的输出:
42.00
68.00
35.00
1.00
70.00
-6277438562204192487878988888393020692503707483087375482269988814848.00
-6277438562204192487878988888393020692503707483087375482269988814848.00
-6277438562204192487878988888393020692503707483087375482269988814848.00
请告诉我为什么会发生这种情况以及如何修复此错误。
1条答案
按热度按时间evrscar21#
memcpy
是有风险的,因为你可能会把要复制的大小弄错。这是你犯的错误。正确的代码是
但是一个更好的复制方法是使用
std::copy
,因为使用std::copy
,你不必指定要复制的元素的大小。