2012-11-19 48 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