win32 API を使用して C でアプリを作成しています。HeapRealloc() 関数を使用して配列のサイズを拡大しようとすると、配列内の現在の値がコピーされずに変更されます。メモリを再割り当てするために使用するコード:
BOOL ChangeFeedArraySize(UINT newSize)
{
char tempChar[20] = "";
PFEED tempArr;
if (newSize == 1)
{
tempArr = (PFEED)HeapAlloc(heap, HEAP_ZERO_MEMORY, sizeof(FEED));
}
else
{
tempArr = (PFEED)HeapReAlloc(heap, HEAP_ZERO_MEMORY, categoryArray, newSize * sizeof(FEED));
// FEED - a struct
// PFEED - a pointer to the struct
// categoryArray - array to be reallocated
}
if (tempArr != NULL)
{
MessageBox(NULL, ltoa(HeapSize(heap, 0, tempArr),tempChar,10) , "Heap size after reallocation", MB_OK | MB_ICONEXCLAMATION);
feedArray = tempArr;
return TRUE;
}
else
{
return FALSE;
}
}
ブレークポイントにあるときの配列のステータスを次に示します。フィード配列は、現在の配列の状態を示します。一時配列は、新しい再割り当てされた配列の状態を示します (これは異なります)。
フィード配列:
feedArray http://www.freeimagehosting.net/uploads/526b0b2172.jpg
一時配列:
tempArray http://www.freeimagehosting.net/uploads/17858f2e7e.jpg
助けてください.. :\
MSDNの関数説明へのリンク