このコードの何が問題になっているのかわかりません。正確に4つの値を入力すると期待どおりに機能しますが、5回目の呼び出し(scanfを要求する前)では、常に次のエラーが発生します。 *glibcが検出されました./a2:ダブルフリーまたは破損(ファストトップ):0x0916e018 * *
これが私のプログラムのコードです:
typedef struct {
int i;
char str[25];
} typeX;
int main(){
int dSize = 0;
int *dSizePtr = &dSize;
dPointer = (typeX **)malloc(sizeof(typeX *)); // makes an array of pointers
int i;
for (i = 0; i < 100; i++)
makeElement(dPointer, dSizePtr); // Puts values into those pointers
free(dPointer);
return 0;
}
void makeElement(dPointer **, int *dSizePtr){
dPointer = (typeX **)realloc(dPointer, sizeof(typeX *)*(*dSizePtr+1)); // grow the array by one
if (typeX == NULL)
return; // some kind of quit statement, just return for now
dPointer[*dSizePtr] = (typeX *)malloc(sizeof(typeX)); // make a new pointer in the array
scanf("%s", dPointer[*dSizePtr]->str); // input the values of the struct (have to use scanf)
char input[20];
scanf("%s", input);
dPointer[*dSizePtr]->int = atoi(input);
++(*dSizePtr);
}
dSizePtrを作成する必要はなく、&dSizeを渡すだけでよいことはわかっていますが、プログラムの現在の設定方法(これはまったく同じではなく、読みやすくするために圧縮されているだけです)、それを渡す必要があります。それ。
正直なところ、なぜこのエラーが発生するのかわかりません。私のコードを何時間も見てオンラインで読んでいて、解決策が見つかりませんでした。どんな助けでも大歓迎です!