Accédez à l'emplacement d'écriture de violation 0xcccccccc
Pour les 2 derniers jours, j'ai été coincé sur une violation et où je n'arrive pas à aller loin.
J'ai utilisé des points de rupture et situé à l'endroit où l'erreur est, mais je suis juste en espérant que l'un d'entre vous savent ce qu'est la question sans avoir à me copier+coller tout mon code -.-
Je suis
Première chance exception à 0x1027cb1a (msvcr100d.dll) Escape.exe: 0xC0000005: violation d'Accès en écriture emplacement 0xcccccccc.
Exception non gérée à 0x1027cb1a (msvcr100d.dll) Escape.exe: 0xC0000005: violation d'Accès en écriture emplacement 0xcccccccc.
Maintenant, une rapide recherche sur google me fait penser il y a quelque chose de particulier se passe. Tous les résultats de la recherche en parler sur les pointeurs ne fait pointer n'importe où (0xccccccccc est un peu de mémoire?).
Je suis encore à utiliser des pointeurs dans mon code mais je vais coller la fonction et le point de la ligne de l'exception est lancée (en gras):
void mMap::fillMap(){
for(int i = 0; i <= 9; i++){
for(int z = 0; z <= 19; z++){
Tile t1; //default Tile Type = "NULLTILE"
myMap[i][z] = t1;
}
}
}
Maintenant myMap est un tableau 2d de type Mosaïque. J'ai eu ce travail il y a quelques jours jusqu'à ce que j'ai ajouté quelques autres classes et tout a cessé de travailler!
source d'informationauteur Linky
Vous devez vous connecter pour publier un commentaire.
Soit un pointeur non initialisé, ou un pointeur stocké dans la mémoire qui a été libéré. Je pense que
cccccccc
est le premier et lecdcdcdcd
est le deuxième, mais il varie avec compilateur/bibliothèque de la mise en œuvre.Pour votre code particulier, probablement
myMap
n'a pas été alloué pour l'instant, alorsmyMap[0][0]
seraient le résultat d'une tentative d'accès à0xcccccccc
.Il peut aussi arriver que
myMap
est le début de votre classe, et le pointeur de classe a été initialisée:Cela se produit parce que la fonction de membre n'est pas du virtuel, de sorte que le compilateur sait ce code à exécuter et passe le pointeur d'objet en tant que paramètre caché. Finalement, le compilateur émet un calcul comme:
this
être initialisée, est0xcccccccc
. À l'évidence, leoffsetof
partie est nulle, eti
etz
sont tous deux à zéro la première fois en boucle, de sorte que vous obtenez0xcccccccc + 0 + 0 + 0
que l'adresse de la mémoire.De débogage, utilisez la pile d'appel et de trouver la fonction qui a appelé
fillMap
. Ensuite, vérifiez dans cette fonction où les pointeurs utilisés pour l'accès des membres (->
) sont venus.Sur MSVC++ et en mode debug, le débogage allocateur de mémoire jeux de tous les retournés de la mémoire à 0xcccccccc, comme un moyen de trouver des cas de comportement indéfini. En toute probabilité, vous jamais initialisé
myMap
, ou quelques-uns des conseils à l'intérieur demyMap
. Vérifiez votre code d'initialisation pour les bugs.Eu le même message d'erreur quand j'ai essayé de les remplir de la chaîne de valeur dans l'élément de la table de mon propre type de classe avec une boucle for. J'ai déclaré 1000 éléments dans le tableau, donc j'ai mis quelque chose comme ça:
Malheureusement, comme avec de la ficelle il est apparu que je suis peut-être en insistant sur fillinf élément qui n'existe pas sorcière est le nombre d'élément de 1000 dans le tableau. J'ai réussi à résoudre ce problème en modifiant la boucle d'en-tête, la suppression du signe égal avant l'an 1000.
D'essayer de voir si vous êtes, ne pas essayer d'appeler quelque chose qui n'existe pas.
Pour toutes les réponses et les commentaires qui se passe dans cette question, voici de bonnes références sur la mémoire se remplit dans Visual C++: