最近、void ポインターの配列を使用して汎用スタックのコードを C で書いています。いくつかのテストを行った後、この最後のテストまで、すべてがうまくいっているように見えました:
while(i < 9) {
push_pila(mi_pila,(int*)&i);
i++;
}
ご覧のとおりi
、関数に引数として anを渡していpush_pila
ます。push_pila
これは、スタック内の関数のコードです。
typedef struct {
void **vec;
int tope;
int16_t max_elementos;
}PILA;
int push_pila(PILA *mi_pila,void *val) {
if(pila_llena(mi_pila)) {
return -1;
}
else {
mi_pila->tope = mi_pila->tope + 1;
mi_pila->vec[mi_pila->tope] = val;
return 0;
}
}
void*
私のスタックはのアドレスの値を含む の配列であるため、問題はここにありますval
。の値を渡すときはi
、そのアドレスを渡しています。この場合の問題は、スタック内のすべての値に同じアドレスが含まれるため、スタック内のすべての値が同じになるため、pop 関数を使用してスタックをポップすると、最後に同じ値が返されることです。の値i
、私の場合9
。
この問題の解決策はありますか? それとも、これが配列内の要素をプッシュする最良の方法ではないということですか?