このプログラムは、動的メモリ ベクトルを作成することになっています。私はmallocを正しく使用していると確信しています。私の本当の問題は、ポインターを使用した構文、特に構造体内のポインターです。
構造体内の int ポインターのアドレスにアクセスしようとしているので、別のポインターに割り当てることができます
私の与えられた構造体は次のとおりです。
typedef struct{
int *items;
int capacity;
int size;
}VectorT;
私が仕事をしようとしている機能は次のとおりです。
int getVector(VectorT *v, int index){
int *p;
p = v->items;//(2)
p -= v->size;
p += index;
return *p;
}
これは、項目ポインタのアドレスからリスト内の項目数を減算し、目的の項目のインデックスを p のアドレスに追加することになっています。次に、p のアドレスにあるものを返します。
行 (2) は必要な構文ではないとかなり強く感じています。
これまでに試したことに応じて、getVector が呼び出されたときにプログラムがクラッシュするか、(私の推測では) いくつかのメモリ ロケーションが出力されます。
ベクトルを追加するコードは次のとおりです。
void addVector(VectorT *v, int i){
if(v->size >= v->capacity){
//allocate twice as much as old vector and set old pointer to new address
v = (VectorT *) malloc(2 * v->capacity * sizeof(VectorT));
if(v == NULL){
fprintf(stderr, "Memory allocation failed!\n");//error catch
}
else{
v->capacity *= 2;//double the reported capacity variable
v->size++;//add one to the reported size variable
v->items =(int *) i;//add the item to the vector (A)<-----
}
}
else{
v->size++;//add one to the reported size variable
v->items =(int *) i;//add the item to the vector (B)<-----
}
}
私の問題はここにあるとは思いませんが、問題がある場合は、ライン A と B に疑いがあります...
どんな洞察も大歓迎です、ありがとう!