私は2つのクラス:spot
とframe
を持っています。ポインタは、クラスへのポインタのベクトルの正しい場所を指していません
spot
は、いくつかの画像処理により検出されたスポットに関するデータを保持している:それだけid
一意である(INT)、及びx
、y
-coordinates(両方とも二重)を有しています。私はspots
と呼ぶベクターにすべてのスポットを保存します。
frame
は、とりわけ、それに属するすべてのスポットへのポインタのベクトルを保持している:
class frame
{
int num ;
vector <spot *> spots_list ;
// other members and functions
}
私は、ファイルからのデータ読み込み:とても基本的に
while (//goes through a lot of rows)
{
spot* S = new spot (ID, X, Y) ;
spots.push_back (*S) ;
frames[i].spot_list.push_back (&spots.back()) ;
delete S ;
}
を、私は新しいインスタンスS
を作成し、そのデータをベクトルspots
に追加し、そのアドレスへのポインタをフレームのspot_list
に追加します。 (少なくとも、これは私がやりたいことです)
フレーム内のすべてのポイントを印刷しようとすると、その中にはガベージデータがあります。 id = 423784237、id = -9431101 - 残りのデータは有効です。
しかし、ベクトルspots
と直接照合すると、正しい場所を指していません。 例えば、ID = 37は、細胞内フレームのspot_list
で0x20f8288が、ベクターspots
で0x210d080です。
ランダムなガベージデータがあり、アドレスが同じではないので、私はこれを正しく実行していないと確信していますが、どうやってやるべきか分かりません。助けていただければ幸いです。
[mcve]を入力してください。 – Barry
なぜ最初にヒープに割り当ててから、コピーを作成して保存した後、元のファイルを削除するのですか? – stijn
要素を追加したためにベクトルを再配置する必要がある場合は、ベクトルの背要素 '&spots.back()'のアドレスを取りますが、そのアドレス**は変更されます**。あなたが 'push_back'を呼び出すとすぐに、その要素に持ってきたすべてのポインタは無効になります*。 – Galik