L'interprétation de valgrind erreur Invalide écrire de la taille 4
J'ai récemment essayer de traquer quelques bugs dans un programme, que je suis en train de travailler sur l'utilisation de valgrind, et l'une des erreurs que j'ai eu était:
==6866== Invalid write of size 4
==6866== at 0x40C9E2: superneuron::read(_IO_FILE*) (superneuron.cc:414)
la ligne fautive # 414 lit
amplitudes__[points_read] = 0x0;
et des amplitudes__ est défini plus haut comme
uint32_t * amplitudes__ = (uint32_t* ) amplitudes;
Maintenant évidemment un uint32_t est de 4 octets de long, donc c'est la taille d'écriture, mais quelqu'un pourrait-il me dire pourquoi il est invalide ?
OriginalL'auteur camelccc | 2012-05-07
Vous devez vous connecter pour publier un commentaire.
points_read
est le plus susceptible de sortir des limites du terrain, vous êtes en train de rédiger passé (ou avant) la mémoire allouée pouramplitudes
.OriginalL'auteur Mat
Une erreur typique de nouveaux programmeurs faire pour obtenir cette mise en garde:
et puis essayez de lire ou d'écrire dans la mémoire à l'emplacement 'taille':
Ici l'allocation devrait être:
OriginalL'auteur Andreas Mikael Bank