以下は私の機能です。1回は正しく実行され、2回目に呼び出されると、「ダブルフリーまたは破損」というエラーが発生します。nullで終了する文字列ではなく整数の配列を格納しているにもかかわらず、他の投稿が示唆しているように、malloc()内に+1を追加しようとしました。それは役に立たなかった。
私はこの時点で非常に混乱しています。関数の最後でfree()であったポインターがスコープから外れない理由、または範囲外になった場合、malloc()でダブルフリーと見なされる方法がわかりません。 d最後に使用されたときにfree()した後。
int getCount(int number) {
int totalUniqueDigits = 0;
bool* allDigits = (bool*)malloc(10 * sizeof(bool));
do {
int currentDigit = number % 10;
number /= 10;
allDigits[currentDigit] = true;
} while (number > 0);
for (int i = 0; i < 10; i += 2) {
if (allDigits[i] == true) {
totalUniqueDigits++;
}
}
free(allDigits); /*This is where the problem is, but only the second time the function is called. */
allDigits = NULL;
return totalUniqueDigits;
}
場合はnumber
、その後、負であります
currentDigit = number % 10;
負にもなります(または10で割り切れる場合はゼロ)。これは、モジュラス演算子のやや厄介な(IMO)定義です。
場合はcurrentDigit
、その後、負であります
allDigits[currentDigit] = true;
範囲外に書き込みます。ほとんどのシステムでは、書き込みallDigits[-1]
はメモリの管理に使用される情報を上書きします。これはプログラムを直接クラッシュさせないかもしれませんが、malloc
後で使用するとその影響を与える可能性があります。
もちろん、解決策は、それが負の場合に使用abs
または追加10
するcurrentDigit
ことです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加