2012-11-19 80 views
1

這是我做的一個粗略的想法:存儲指針變成地圖

Map map; 
create_map(map); //initialize map 
Value x,y; 
while(...){ 
    ... 
    x = ...; 
    y = ...; 
    put(map, x, (void *) &y); 
    ... 
} 

地圖的類型爲{值,(無效*)}。地圖是自定義的,但我沒有寫。我想弄清楚它在哪裏定義,如果我找到它會更新。所有的地圖都是在某種結構中存儲一個Value和一個(void *)的關聯。

我認爲發生的事情是插入到地圖中的值y沒有得到我想要的值。它在while循環執行後存儲y的任何值。我希望每次迭代的地址不同,並指向y的不同版本。

因此,對於上面的代碼,對於地圖中的任何鍵X,它們都指向相同的值。我希望他們指出不同的價值觀。

+2

由於您的函數'create_map'和'put'不是C的一部分,因此所有投注都關閉。 –

+1

如果不瞭解「Map」是什麼以及「create_map」或「put」是做什麼的,那麼任何人都很難幫助你。 –

+0

地圖是自定義創建的,但我沒有創建它。我試圖找到它在哪裏宣佈。該地圖只是將一個Value與一個(void *)相關聯,並將該關聯存儲在某種結構中。 – user972276

回答

2

做你想做什麼,你需要分配「價值」的不同拷貝,這樣的事情:

Map map; 
Value x; 
Value *y; 
create_map(map); //initialize map 
while(...){ 
    ... 
    x = ...; 
    y = malloc(sizeof(Value)); 
    *y = ...; 
    put(map, x, (void *) y); 
    ... 
} 

只是不要忘記在年底解除分配。

+0

謝謝!這正是我想要做的,我只是想不到它atm。 – user972276