XML
ファイルをループしてstruct
にデータを格納する前に、そのstruct's
ポインタをvector
に格納しようとしています(私はそうだと思います)。しかし、直近のアクセス番号struct
にアクセスした直後にデータにアクセスしようとすると、どのインデックスにアクセスしても問題ありません。問題の構造体のベクトルへのアクセス
struct
:
typedef struct
{
double trueHeadingRadians;
double latitude;
double latitudeRadians;
double longitude;
double longitudeRadians;
.
.
} wayPoint;
関連vector
機能:
typedef struct
{
void **items;
unsigned int capacity;
unsigned int total;
} vector;
// intitiaizes vector struct
void vectorInit(vector* v)
{
v->capacity = VECTOR_INIT_CAPACITY; // 4
v->total = 0;
v->items = malloc(sizeof(void*) * v->capacity);
}
// resizes vector
static void vectorResize(vector* v, int capacity)
{
void** items = realloc(v->items, sizeof(void*) * capacity);
if(items)
{
v->items = items;
v->capacity = capacity;
}
}
// returns total number of members in vector
unsigned int vectorTotal(vector *v)
{
return v->total;
}
// adds element to vector
void vectorAdd(vector* v, void* item)
{
if(v->capacity == v->total)
{
vectorResize(v, v->capacity * 2);
}
v->items[v->total++] = item;
}
// gets item from vector
void* vectorGet(vector* v, unsigned int index)
{
if(index >= 0 && index < v->total)
{
return v->items[index];
}
return NULL;
}
だから今は、ベクターにstruct
のvoid pointer
を追加する前にstruct
に値を追加します。
vector simDataVector;
vectorInit(&simDataVector);
wayPoint pointStruct = {0};
pointStruct.latitude = 37.415000;
.
.
// add struct pointer to vector
vectorAdd(&simDataVector, &pointStruct);
printf("length of vector: %u\n", vectorTotal(&simDataVector));
// THIS IS WHERE I THINK THE ISSUE IS -- AM I DEREFERENCING THIS PROPERLY?
printf("latitude = %f\n", ((wayPoint*)vectorGet(&simDataVector, indx))->latitude);
この出力は、次のとおりです。ループを通るたびに正しい
length of vector: 1 // whichever index I am currently on
latitude = 37.415000 // the most recently added struct's latitude
!ベクトルは、データだけでなくサイズも適切に追跡できます。初期化後まで。テストのために各道点struct
を印刷しようとすると、各インデックスには最近追加されたwayPoint struct
のデータが表示されます。私はここでとても混乱しています。
これらの線は、wayPoint pointStruct = {0}です。 wayPoint.latitude = 37.415000'は、セミコロンがない場合でも、コンパイルしません。 2行目の 'pointStruct.latitude'でなければなりませんか? –
あなたは 'indx'がどこに定義されているのか、どのように値に設定されているのかを表示していません。その価値は何ですか?ベクトルに別のポイントを追加するときに、引き続き '&pointStruct'を渡しますか?そうであれば、1つの変数に多くの異なる値を格納しようとしており、同時に複数の変数(最新のもの)を管理することはできません。私はこれがあなたの問題だと思う。あなたがMCVE(MCVE)を見せてくれれば、決定的になる方がずっと簡単です。 –
@HappyCoder:CはC++ではないためです。 –