掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ファイル読み込み時にメモリリーク (ID:70102)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
こんにちわ。 前回は大変お世話になりました、クロウです。 boost::asioの方は実装できまして、次にファイルのアーカイブ化に着手したのですが、アーカイブ化したファイル読み込み時にメモリリークが発生して困っています。 〜Main〜 CArchiveLoader* Archive; Archive=new CArchiveLoader(); Archive->Load("imgdat.dat"); 〜Archive〜 bool CArchiveLoader::Load(string name) { DWORD nbytes; HANDLE h=CreateFile( name.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h==INVALID_HANDLE_VALUE) return false; DWORD size=GetFileSize(h, NULL); char* data=new char[size]; if (WorkSize<size) { if (Work) delete[] Work; Work=new char[size]; WorkSize=size; } ReadFile(h, Work, size, &nbytes, NULL); CloseHandle(h); Rand.Init(Password); for (DWORD i=0, n=size-3; i<n; i+=4) { *(DWORD*)(Work+i)^=Rand.Int32(); } DWORD sum=0; for (DWORD i=4, n=size-3; i<n; i+=4) { sum+=*(DWORD*)(Work+i); } if (sum!=*(DWORD*)Work) return false; Entry.clear(); char* p=Work+sizeof(DWORD); DWORD num_entries=*(DWORD*)p; p+=sizeof(DWORD); for (DWORD i=0; i<num_entries; i++) { ARCHIVE_ENTRY e; e.Name=p; p+=e.Name.length()+1; e.Size=*(DWORD*)p; p+=sizeof(DWORD); e.Offset=*(DWORD*)p; p+=sizeof(DWORD); e.Data=Work+e.Offset; Entry.push_back(e); } return true; } 〜エラーメッセージ〜 Detected memory leaks! Dumping objects -> {767} normal block at 0x00A76EC8, 32 bytes long. Data: <imgdat\ yL.png> 61 69 6D 67 5C 97 EC 96 B2 8A 79 4C 2E 70 6E 67 {765} normal block at 0x00A75F08, 32 bytes long. Data: <imgdat\ {L.png> 61 69 6D 67 5C 97 EC 96 B2 93 7B 4C 2E 70 6E 67 {763} normal block at 0x00A75EA8, 32 bytes long. Data: <imgdat\ L.png> 61 69 6D 67 5C 97 EC 96 B2 8A EC 4C 2E 70 6E 67 〜〜〜 多分どこか妙な所でメモリリークしているのだと思うのですが、どうすればいいのかわかりません。 イマイチどうすればよいのかわからないので、わかる方がいらっしゃればお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.