大きなプログラムでメモリリークが発生しましたが、これがその原因だと思います。charポインタが配列のメモリリークを構造化しています
#include <stdlib.h>
#include <Windows.h>
typedef struct _struct{
char* name;
} str;
int main() {
system("PAUSE");
str* Character = (str*)malloc(sizeof(str) * 20000);
for(int i = 0; i < 20000; i++){
Character[i].name = (char*)malloc(20000); // Assign memory.
}
for(int i = 0; i < 20000; i++){
free(Character[i].name); // Free memory.
}
free(Character);
system("PAUSE");
}
最初の一時停止時のメモリ:〜500K。
第2ポーズ時のメモリ:〜1.7M。
テスト用にVS2012を使用する。何か案は?
コードが正しいように見えます。あなたはどのようにメモリ使用量を測定していますか?あなたのヒープマネージャは、 'free'への呼び出しに続いてヒープを圧縮していない可能性がありますか?この場合、余分なメモリはプロセスに割り当てられますが、プログラムでは使用されないため、実際には他のコードが割り当てられるようになります。 – simonc
mallocを使うとき、plsはメモリが実際に割り当てられているかどうかを確認してください。(Character == NULL) – hazzelnuttie
mallocから戻り値をキャストすべきではありません。これはCであり、あなたはvoid *を何かに割り当てることができます。 –