2016-09-06 43 views
-3

在我的以下代码中,我将buffer设为使用malloc(r * c * sizeof(double*));创建的二维数组。我想用memcpybuffer的前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)); 
     ^~~~~~~~~~~~~~~~~~~~~~~~~~ 

有人能告诉我为什么吗?

预先感谢您。

+4

当然这不是编译器的诊断的全部? – EOF

+0

没有二维数组,而是一维数组。任何你不使用二维数组的原因,但手动做索引数学? – Olaf

+0

什么是错误信息?看[问]并提供[mcve]。 – Olaf

回答

2
double *buffer = malloc(10 * 3 * sizeof(double*)); 

这是不对的,一个指向double想空间对于n double S(不是n个指针,以double

更改为

double *buffer = malloc(10 * 3 * sizeof(double)); 

同为temp

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) */ 

看看到defining a 2D array with malloc and modifying it

+0

或使用二维数组... – Olaf

+0

非常感谢你 –

+0

@Olaf,你是对的,但在我看来,OP想要一个平面二维数组(由于在malloc中传递的维数) –