1

这是我在做什么的一个粗略的想法:

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

Map 的类型为 {Value, (void *)}。地图是自定义编写的,但我没有编写。我试图弄清楚它是在哪里定义的,如果我找到它会更新。映射所做的只是将 Value 和 (void *) 的关联存储在某种结构中。

我认为正在发生的事情是插入到地图中的值 y 没有得到我想要的值。它在 while 循环执行后存储 y 的任何值。我希望每次迭代的地址都不同,并指向不同版本的 y。

因此,对于上面的代码,对于映射中的任何键 X,它们都指向相同的值。我希望他们指向不同的价值观。

4

1 回答 1

2

为了做你想做的事,你需要分配不同的“价值”副本,如下所示:

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

只是不要忘记在最后解除分配。

于 2012-11-19T17:24:27.740 回答