memcpy和指针

时间:2011-04-01 10:40:25

标签: c memcpy

我很困惑如何使用memcpy读取数组中复制的指针。 以下是我尝试过的,但不起作用。

基本上,我已经分配了内存块,我在其中复制类似于数组时尚的指针,但在重试期间它不起作用。虽然这适用于基本数据类型

我想在element区块中存储任何内容,可以是integerspointers

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define INDEX(x)  ((char *)elements + (sizeof(int*) * (x)))
int size = 10;

void f2_int_ptr() {    
    int i = 0;
    void *elements = (void*)malloc(size * sizeof(int*));
    for ( i = 0; i < size; i++ ) { 
       int *v = ( int *) malloc ( sizeof(int));
       memcpy ( v, &i, sizeof ( int ));


       memcpy ( INDEX(i) , v,  sizeof (int*));
    }
    for ( i = 0; i < size; i++ ) { 
        int *v = (int*)0;
        memcpy ( v, INDEX(i), sizeof(int *));
        printf ( "%d\n", *v );
    }
}
void f1_int() {
    int i = 0;
    void *elements = (void*)malloc(size * sizeof(int));
    for ( i = 0; i < size; i++ ) { 
       memcpy ( INDEX(i) , &i,  sizeof (int));
    }
    for ( i = 0; i < size; i++ ) { 
        int v;
        memcpy ( &v, INDEX(i), sizeof ( int ));
        printf ( "%d\n", v );
    }
}
int main(){
    f1_int();
    f2_int_ptr();
    return 0;
}

在上面的代码f1_int中工作正常但f2_int_ptr不起作用。

4 个答案:

答案 0 :(得分:8)

f2_int_ptr()需要成为这个:

void f2_int_ptr() {
    int i = 0;
    void *elements = malloc(size * sizeof(int*));

    for ( i = 0; i < size; i++ ) { 
       int *v = malloc ( sizeof(int));
       memcpy ( v, &i, sizeof ( int ));
       memcpy ( INDEX(i) , &v,  sizeof (int*));
    }

    for ( i = 0; i < size; i++ ) {
        int *v;
        memcpy ( &v, INDEX(i), sizeof(int *));
        printf ( "%d\n", *v );
    }
}

请注意memcpy()参数的细微更改。

注意:我真的,真的,真的,不会写这样的代码!这非常难以理解。

答案 1 :(得分:0)

代码非常难看,所以我甚至不知道它应该如何工作,但是: 你为什么在这里使用&amp; v:

memcpy ( &v, INDEX(i), sizeof ( int ));

v是指针本身:

int *v = (int*)0;

答案 2 :(得分:0)

如果要将指针存储在元素中,我认为最终的memcpy需要使用&amp; v将元素复制到指针v。类似于v = elements [i]。

void f2_int_ptr() {    
    int i = 0;
    void *elements = (void*)malloc(size * sizeof(int*));
    for ( i = 0; i < size; i++ ) { 
       int *v = ( int *) malloc ( sizeof(int));
       memcpy ( v, &i, sizeof ( int *));


       memcpy ( INDEX(i) , &v,  sizeof (int*));
    }
    for ( i = 0; i < size; i++ ) { 
        int *v = (int *)0;
        memcpy ( &v, INDEX(i), sizeof(int *));
        printf ( "%d\n", *v );
    }
}

答案 3 :(得分:0)

感谢伙计们,终于工作了。 我想我还没有分配复制memcpy的空间。

void f2_int_ptr() {    
    int i = 0;
    void *elements = (void*)malloc(size * sizeof(int*));
    for ( i = 0; i < size; i++ ) { 
       int *v = ( int *) malloc ( sizeof(int));
       memcpy ( v, &i, sizeof ( int ));

       memcpy ( INDEX(i) , v,  sizeof (int*));
    }
    for ( i = 0; i < size; i++ ) { 
        int *v = ( int *) malloc (sizeof(int*));
        memcpy ( v, INDEX(i), sizeof(int*));
        printf ( "%d\n", *v );
    }
}