Voici mon code:corruption Heap lors de la suppression d'une chaîne
std::string readString()
{
int strLen = Read<int>();
char* rawString = new char[strLen];
Read(rawString, strLen);
rawString[strLen] = '\0';
std::string retVal(rawString);
delete [] rawString;
return retVal;
}
La première ligne lit la longueur de la chaîne.
La deuxième ligne crée un nouveau tableau char (c-string) avec la longueur de la chaîne
La troisième ligne lit la chaîne (elle la lit dans un fichier)
La 4ème ligne ajoute une valeur NULL à la fin.
La 5ème ligne crée une chaîne std :: hors de la chaîne de caractères.
La 6ème ligne supprime la chaîne de caractères (HEAP CORRUPTION HAPPENS HERE)
La 7ème ligne renvoie la chaîne, mais elle n'atteint jamais ce point en raison d'une erreur.
Sur la ligne 6, j'obtiens une erreur de corruption de tas: CRT a détecté que l'application a écrit en mémoire après la fin du tampon de tas.
Ma question peut être évidente, mais pourquoi suis-je obtenir une corruption de tas? Quand je crée une chaîne std ::, elle doit copier la chaîne, et je devrais pouvoir supprimer la chaîne de caractères en toute sécurité.
Actuellement, je soupçonne que std :: string essaie d'accéder à la chaîne de caractères après l'avoir supprimée.
Des idées?
Vous avez 'delete []' dans votre code, donc votre code est mauvais. Utilisez un 'std :: vector' ou quelque chose, ou même lisez directement dans la chaîne. – GManNickG
@GMan: N'a même pas vu votre commentaire avant que je posté: p C'est incroyable comment il simplifie le code aussi ... –