私はマルチレベルキャッシュシミュレータを作成しました。最高のパフォーマンスキャッシュを見つけるために、私はかなり長い間ループするループを作成しました。mallocとフリーループ。オブジェクトはおそらく解放された後に変更されました。
各ループは、malloc関数で、メモリを割り当てるされているので、私はそれをmallocさ何でも解放され、私が実行したときに、私はこのエラーを取得:
解放されたオブジェクトのための」間違ったチェックサム - オブジェクトはおそらく、解放された後に変更されました
012:それはメモリを割り当て、ここで "/* cache1 */ if (S1 == 0) { L1 = 1; d_Cache1.cache_Array = (aBlock *)malloc((int)pow(2, (C1-B1)) * sizeof(aBlock)); /* static int cache1[(int)pow(2,(C1 - B1))]; */ } else if (S1 == C1-B1) { L1 = 2; f_Cache1.cache_Array = (aBlock *)malloc((int)pow(2, (C1-B1)) * sizeof(aBlock)); } else { L1 = 3; s_Cache1.cache_Array = malloc((int)pow(2, (C1 - S1 - B1))*sizeof(aBlock *)); if(s_Cache1.cache_Array == NULL){ fprintf(stderr, "out of memory\n"); return; } for (i = 0; i < (int)pow(2, (C1 - S1 - B1)); i++) { s_Cache1.cache_Array[i] = malloc((int)pow(2, S1) * sizeof(aBlock)); if (s_Cache1.cache_Array[i] == NULL) { fprintf(stderr, "out of memory\n"); return; } } sc_Count1 = malloc((int)pow(2,S1) * sizeof(aBlock)); for (i = 0; i < (int)pow(2, S1); i++) { sc_Count1[i] = 0; } }
は、ここでは、コード
の一部はここにいます
、すべてを実行した後、それが解放されます:
//cache1
if (S1 == 0) {
free(d_Cache1.cache_Array);
} else if (S1 == C1-B1) {
free(f_Cache1.cache_Array);
} else {
for (i = 0; i < (int)pow(2, (C1 - S1 - B1)); i++) {
free(s_Cache1.cache_Array[i]);
}
free(s_Cache1.cache_Array);
free(sc_Count1);
}
このメモリの問題を引き起こしている可能性がありますか? 私は割り振った正確なメモリを解放しており、値はS1
、C1
、B1
は次のループまで変更されません。
フォーマットを整理できますか。 –
あなたがLinuxを使っているなら、Valgrindを使ってこれを見つけて、脳の炎症を止めてください:) – JimR