1

これは私がしていることの大まかな考えです:

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

マップのタイプは{Value、(void *)}です。マップはカスタムで作成されていますが、私は作成しませんでした。私はそれがどこで定義されているかを理解しようとしています、そして私がそれを見つけたら更新します。マップが行うのは、値と(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 に答える