В чем проблема с этим кодом? Он падает каждый раз.несколько вызовов для realloc(), похоже, вызывают кучевое повреждение
Однократно это неудавшееся утверждение «_ASSERTE (_CrtIsValidHeapPointer (pUserData));», в других случаях это всего лишь ошибка «кучка corppuption».
Изменение размера буфера влияет на эту проблему каким-то странным образом - иногда она падает на «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);
Спасибо!
(Извините за редактирование Phantom). Реальный вопрос: почему вы используете realloc на C++? Для этого используется 'std :: vector'. –
На самом деле я пишу класс .. память выпущена в деструкторе, поэтому никакого вреда никогда не бывает. std :: vector слишком тяжел для этой конкретной цели. – Windindeed
Что именно вы видите как «тяжелый» о 'vector'? На самом деле, даже при малейшем уходе он почти всегда будет значительно быстрее *, чем это (возможно, с меньшим кодом). –