HeapReAllocについて
HeapReAllocについて質問いたします
VC++5.0 & SDK で作成しています
以下のようにメモリを確保し、その後メモリの移動が起こらないように
HEAP_REALLOC_IN_PLACE_ONLYを指定してHeapReAllocしています
必ず決まった回数でHeapReAllocが失敗してしまいます
やはり下のようにリサイズに失敗したら新たに領域を確保し
それまでのデータをコピーするのが普通なのでしょうか?
ただ単にメモリを移動せずに取れるだけの領域がなくて失敗しているだけならば
いいのですが、それほど大きいサイズでもないし、根本的に間違っているなら
解決にならないと思いまして質問させていただきます
よろしくお願いいたします
time_t *endtime;
time_t *tmptime;
if ((endtime = (time_t *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(time_t) * tile_cnt)) == NULL) {
return 0;
}
while( tile_cnt < 30 ){
tile_cnt++;
// リサイズ
if((tmptime = (time_t *)HeapReAlloc(GetProcessHeap(), HEAP_REALLOC_IN_PLACE_ONLY, endtime,
tile_cnt*sizeof(time_t))) == NULL){
// サイズ拡大できなかったので再度そのサイズで領域確保
if ((tmptime = (time_t *)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(time_t) * tile_cnt))
== NULL) {
HeapFree(GetProcessHeap(), 0, endtime);
return 0;
} else {
// 新しく領域を確保したので今までのデータをコピー
CopyMemory(tmptime, endtime, sizeof(time_t)*(tile_cnt-1));
// 元の領域を開放
HeapFree(GetProcessHeap(), 0, endtime);
endtime = tmptime;
}
} else {
endtime = tmptime;
}
}
//解放
HeapFree(GetProcessHeap(), 0, endtime);
補足
問題のソースを載せたいのですが、どこのソースを載せればいいかもわかりません。 不具合の箇所がわからないし、全ソースは膨大なので。 でもそれだど答えられないってことですよね。 GUIのプログラムを組むと勝手にロジックを何回も回ることってあるんでしょうか。 あるとしたら、どんな機能なんでしょうか。 何回もまわる現象のヒントも手元にないので、作業が止まってしまっています。経験則でも結構ですので、お願いします。