在下面的代码中,我创建了 buffer
作为使用 malloc(r * c * sizeof(double*));
创建的二维数组。我想复制buffer
的前12个元素(即前 4 行)进入第二行 temp
使用memcpy
.
double *buffer = malloc(10 * 3 * sizeof(double*));
double *temp = malloc(4 * 3 * sizeof(double*));
for (int i = 0; i < 4; ++i) {
memcpy(*(temp+ i*3), *(buffer + i*3), 3 * sizeof(double));
}
我收到此错误:
memcpy(*(temp+ i*3), *(buffer + i*3), 3 * sizeof(double));
^~~~~~~~~~~~~~~~~~~~~~~~~~
谁能告诉我为什么?
提前谢谢您。
最佳答案
double *buffer = malloc(10 * 3 * sizeof(double*));
这是错误的,指向 double
的指针需要 n 个 double
的空间(而不是 n 个指向 double
的指针)
更改为
double *buffer = malloc(10 * 3 * sizeof(double));
与临时
相同
I want to copy the first 12 elements of buffer (i.e. the first 4 rows) into the second one temp using memcpy
用途:
memcpy(temp, buffer, sizeof(double) * 12);
I get this error:
> memcpy(*(temp+ i*3), *(buffer + i*3), 3 * sizeof(double));
> ^~~~~~~~~~~~~~~~~~~~~~~~~~
Can someone tell me why?
memcpy
想要一个指针(一个地址),但您正在取消引用该指针(因此传递一个像 3.14
这样的值而不是地址)
你想要一个真正的二维数组吗?
在这种情况下你应该使用
double (*buffer)[cols] = malloc(sizeof(*buffer) * rows); /* VLA (since C99) */
关于c - 使用 memcpy 复制内存块时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354159/