2012-01-22 12 views
2

私は別のものに1つの配列をコピーするのmemcpyを扱っています:奇妙な挙動はmemcpyをと「エイリアス」

:ここでのコードは、実行がくれた

.... /* s is a struct with int *t_con_cust; */ 
/* bad to use an equivalent name i guess ..*/ 
s.t_con_cust = malloc(nb_cust*sizeof(*s.t_con_cust)); 
int *t_con_cust = malloc(nb_cust*sizeof(*t_con_cust)); 
...  
t_con_cust[0] = 1; 
memcpy(s.t_con_cust, t_con_cust, nb_cust*sizeof(int)); 

fprintf(stdout, "s.t_con_cust[0] -> %d \n", s.t_con_cust[0]); 
t_con_cust[0] = 0; 
fprintf(stdout, "s.t_con_cust[0] -> %d \n", s.t_con_cust[0]); 

(私も宣言ました)

s.t_con_cust [0] - > 1

s.t_con_cust [0] - > 0

あるbeyo ND私は、私はその

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

typedef struct { 
    int *dest; 
} lambda_struct; 


int main(void) { 
    lambda_struct s; 
    s.dest = malloc(10*sizeof(*s.dest)); 
    int *src = malloc(10*sizeof(*src)); 
    int i; 

    for(i = 0; i < 10; ++i) 
     src[i] = 1; 

    memcpy(s.dest, src, 10); 

    fprintf(stdout, "dest[0] -> %d \n", s.dest[0]); 
    src[0] = 0; 
    fprintf(stdout, "dest[0] -> %d \n", s.dest[0]); 

    free(src); 
    free(s.dest); 

    return 0; 
} 

実行などの「サンプルコード」をしようとしたときので、私に期待される結果を与える - > 1と1

任意のアイデア?おかげ

+0

'nb_cust'は0(または否定)ではありませんか? – pmg

+0

ある時点で 't_con_cust'に' s.t_con_cust'を代入することができますか(またはその逆)、同じメモリを指し始めますか? –

+0

'...'には何かがありますまたは両方のポインタ? –

答えて

2

場合

s.t_con_custこのコード

fprintf(stdout, "s.t_con_cust[0] -> %d \n", s.t_con_cust[0]); 
t_con_cust[0] = 0; 
fprintf(stdout, "s.t_con_cust[0] -> %d \n", s.t_con_cust[0]); 

結果[0] - > 1
s.t_con_cust [0] - 次に> 0

理にかなっているのは、

t_con_cust == s.t_con_cust 

この条件が真でない場合、t_con_cust[0]への割り当てはどのようにs.t_con_cust[0]に影響しますか?

私は、2つのポインタが等しいかどうかをテストすると、それらが実際に等しいことがわかります。そして、あなたは、同じ値に2つのポインタを割り当てるコードの部分を見つける必要があります。

+0

本当にそれは私の(大きな)ループの後だったので、私はこのように検索しませんでした..ありがとう! – roro