私のコードの一部は、テキスト ファイルから不明な行数を読み取り、その行を構造体 (tempSomeStruct) に解析し、SomeStruct_Array のサイズを変更してから、その tempSomeStruct をメモリ内の新しく開いた場所に追加します。
ただし、whileループを数回実行した後、プログラムが停止して次のように表示されます
myApplication.exe がブレークポイントをトリガーしました。
ブレークポイントを設定していませんでした。掘り下げてみると、realloc の呼び出しによるヒープの破損が原因でブレークポイントが発生しているように見えます。私は動的割り当てにはかなり慣れていないので、いくつかの考えられる原因を検索して見つけましたが、これまでのところ修正は行われていません。
この状況でヒープを破損させるにはどうすればよいですか? また、そうしないようにするにはどうすればよいでしょうか?
私はこのような機能を持っています:
int growArray(SomeStruct **SomeStruct_Array,int currentSize, int numNewElements)
{
const int totalSize = currentSize + numNewElements;
SomeStruct *temp = (SomeStruct*)realloc(*SomeStruct_Array,(totalSize * sizeof(SomeStruct)));
if (temp == NULL)
{
printf("Cannot allocate more memory.\n");
return 0;
}
else
{
*SomeStruct_Array = temp;
}
return totalSize;
}
そして、次のように別の場所で呼び出されます。
SomeStruct* SomeStruct_Array = (SomeStruct *) calloc(1,sizeof(SomeStruct));
int Error_Array_Size = 0;
if(SomeStruct_Array == NULL)
{
printf("Cannot allocate initial memory for data\n");
return;
}
while(fgets(line,sizeof(line), file) != NULL)
{
parseTextIntoSomeStruct(line, &tempSomeStruct);
SomeStruct_Array_Size = growArray(&SomeStruct_Array,SomeStruct_Array_Size,1);
if(SomeStruct_Array_Size > 0)
{
SomeStruct_Array[SomeStruct_Array_Size] = tempSomeStruct;
}
}