にメモリをクリアしようとしたとき、私はポインタの配列を解放する機能を書いているが、私は関数を呼び出したときに、「二重解放や破損(fasttop)」をランタイムエラーを取得しています。この関数の目的は、ファイルが既に開いていてfillArray関数が再度呼び出された場合に、入力ファイルからデータを取得する配列をクリアすることです。ここでダブル無料または破損C++
が問題の原因となっている機能である:それはどこかのプログラムで呼ばれていた場合
void freeArray(Country ** g_countryArray)
{
for (int i = 0; i < g_arrsz; ++i)
{
delete [] g_countryArray;
}
}
を、私の知る限り、それはプログラムがクラッシュする原因となります。私はデバッガを実行しましたが、出力を非常に理解するのに十分な経験はありません。それが助けになるなら、私はそれから情報を投稿することができます。
同じポインタを何回も削除するのはなぜですか?これは意味がありません。一つは十分です。 2回目は未定義の動作を示します。 –
問題は 'g_arrsz'が'> 1'です。それはポインタの配列ではなくポインタの配列を削除するので、あなたと関数は間違ったことをするでしょう。よく実際にあなたの問題は、C++やCを知らず、ポインタへのポインタを使用しているように見えます。待って!あなたの直ぐの問題は[mcve]の欠如です。基本的に99の問題があり、この問題はそれらをすべて修正するつもりはありません。 – Yakk
より良い答えを作り出す方向に感謝します。はい、私はC++を学んでいるので、私は専門家ではありません。なぜポインターへのポインターが良くないのかもしれませんか?これはクラスの割り当てのためのものであり、ポインタへのポインタを使用することは要件の一部です... –