我给自己创建了一个数组:
double* input_array_pointer;
input_array_pointer = (double*)malloc(input_array_size * sizeof(double));
fill_array(input_array);
现在我的数组充满了 double 。
我需要制作输出数组,它需要是输入数组的副本,但我自己得到的只是指向输入数组的指针。 (因此,我在输出数组上所做的所有工作(例如更改某些数字)都将应用于输入数组。)
这是我的错误做法:
double* output_array_pointer;
output_array_pointer = (double*)malloc(array_size * sizeof(double))/*memory allocation using malloc*/
memcpy(output_array_pointer, input_array_pointer, (sizeof(input_array_pointer))+1);
正确的做法是什么?
最佳答案
sizeof
运算符仅适用于静态声明的数组(例如:double my_array[10]
)。否则,sizeof
返回指针的大小,这不是您想要的。
要正确复制动态分配的数组,您需要知道该数组的大小。在您的情况下,这是 input_array_size
:
memcpy(output_array_pointer, input_array_pointer, input_array_size * sizeof(double));
关于C 数组复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55248622/