la corruption de segment détecté | C++
- Je obtenir ce "heap corruption detected
" message après l'exécution de ce code :
uli& uli::operator =(char* n)
{
char* buffer = new char[strlen(n)];
char* p;
int op;
int coef;
strcpy(buffer, n);
while(*buffer)
{
op = strlen(buffer) - 5;
p = (op >= 0) ? op+buffer : buffer;
coef = atoi(p);
if(coef > 65535)
coef = atoi(++p);
push(head, coef);
*p = 'uli& uli::operator =(char* n)
{
char* buffer = new char[strlen(n)];
char* p;
int op;
int coef;
strcpy(buffer, n);
while(*buffer)
{
op = strlen(buffer) - 5;
p = (op >= 0) ? op+buffer : buffer;
coef = atoi(p);
if(coef > 65535)
coef = atoi(++p);
push(head, coef);
*p = '\0';
}
delete buffer; // <- heap corruption detected
return *this;
}
';
}
delete buffer; // <- heap corruption detected
return *this;
}
C'est comme ça que j'appelle la méthode:
uli x;
x = "9876123";
Ce n' "corruption de segment détecté"?
Utilisation
Avez-vous bien à l'aide d'un objet pour gérer la mémoire. Peut-être un std::string au lieu d'un char*.
je ne suis pas bon
delete [] buffer
.Avez-vous bien à l'aide d'un objet pour gérer la mémoire. Peut-être un std::string au lieu d'un char*.
je ne suis pas bon
OriginalL'auteur Jonas | 2012-03-04
Vous devez vous connecter pour publier un commentaire.
"Corruption de segment de mémoire" signifie généralement que vous avez écrit dans la mémoire non allouée, d'endommager les structures de données utilisées pour faire de l'allocateur de mémoire de travail.
Il y a peut être plus de problèmes, mais le premier que je vois est sur cette ligne:
Cela écrire
strlen(n) + 1
octets àbuffer
, maisbuffer
est seulementstrlen(n)
octets de long (l'octet supplémentaire est appelé à disparaître\0
.) L'écriture qui octet supplémentaire entraîne un comportement non défini, et pourrait bien endommager le tas.Vous êtes les bienvenus! Veuillez accepter la réponse lorsque le site vous permet.
Aussi, ne manquez pas Ates Goral commentaire. Si vous allouez avec
new[]
, vous gratuit avecdelete[]
.Oui, en effet, tout à fait correcte.
OriginalL'auteur Ernest Friedman-Hill