Quel est le problème avec ce code? Il se bloque à chaque fois.plusieurs appels à realloc() semble causer une corruption de tas
Une fois c'est une assertion qui a échoué "_ASSERTE (_CrtIsValidHeapPointer (pUserData));", d'autres fois c'est juste une erreur "tas corrpuption".
La modification de la taille de la mémoire tampon affecte ce problème de manière étrange - parfois elle se bloque sur le "realloc", et d'autres fois sur le "libre".
J'ai débogué ce code plusieurs fois, et il n'y a rien d'anormal concernant les pointeurs.
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);
Merci!
(Désolé pour l'édition Phantom) La vraie question est: Pourquoi utilisez-vous realloc en C++? C'est à ça que sert 'std :: vector'. –
En réalité, j'écris une classe .. la mémoire est libérée dans le destrucor, donc aucun mal n'est jamais possible. std :: vector est juste trop lourd pour ce but précis. – Windindeed
qu'est-ce que vous voyez exactement comme "lourd" à propos de 'vector'? En réalité, avec le moindre soin, il sera presque toujours * plus rapide * que cela (probablement avec un code plus petit). –