這段代碼有什麼問題?它每次都會崩潰。多次調用realloc()似乎會導致堆損壞
有一次,它是一個失敗的斷言「_ASSERTE(_CrtIsValidHeapPointer(pUserData));」,其他時候它只是一個「堆錯誤」錯誤。
更改緩衝區大小會以一些奇怪的方式影響此問題 - 有時會在「realloc」上崩潰,而其他時間會在「free」上崩潰。
我已經調試過這段代碼很多次了,關於指針沒有任何異常。
char buf[2000];
char *data = (char*)malloc(sizeof(buf));
unsigned int size = sizeof(buf);
for (unsigned int i = 0; i < 5; ++i)
{
char *ptr = data + size;
size += sizeof(buf);
char *tmp = (char*)realloc(data, size);
if (!tmp)
{
std::cout << "Oh no..";
break;
}
data = tmp;
memcpy(ptr, buf, sizeof(buf));
}
free(data);
謝謝!
(抱歉虛幻編輯)真正的問題是:爲什麼你在C++中使用realloc?這就是'std :: vector'的用途。 – 2010-06-07 21:07:40
在現實中,我正在寫一堂課..內存是在破壞中釋放的,所以不會有任何傷害。 std :: vector對於這個特定的目的太重了。 – Windindeed 2010-06-07 21:15:24
你認爲「矢量」的「重量」究竟是什麼?在現實中,即使稍微小心一點,它幾乎總是會比這更快(比較小的代碼很可能)。 – 2010-06-07 21:36:29