Au Moment de l'exécution de Panne de contrôle N ° 2 - Pile autour de la variable a été endommagé
J'ai déjà vu quelques questions ici à stackoverflow, mais aucun n'a résolu mon problème...
j'ai ce code en C:
#include <stdio.h>
#include <stdlib.h>
int main ()
{
char str[] = "";
scanf("%[^\n]", str);
printf("Você digitou: %s\n", str);
system("pause");
}
Quand je lance le programme, j'ai eu l'erreur:
Moment de l'exécution de l'Échec du contrôle N ° 2 - Pile autour de la variable 'str' a été endommagé.
maintenant, je ne sais vraiment pas ce que je fais mal là... 🙁
OriginalL'auteur wikarus | 2012-10-08
Vous devez vous connecter pour publier un commentaire.
Le tableau
str
ne peut détenir qu'un seulchar
compte tenu de son initialisation. L'appel àscanf()
sera d'écraser les limites de lastr
provoquant un comportement indéterminé, dans ce cas de corruption de la pile. Vous devez décider de la taille de l'str
tableau doit être et de limiter le nombre de caractères lus pour empêcher la saturation de la mémoire tampon.À utiliser
scanf()
vous spécifiez le nombre maximum de caractères à lire:Vous pouvez également utiliser
fgets()
mais aurait besoin d'enlever le caractère de nouvelle ligne par la suite.OriginalL'auteur hmjd
Vous ne devez pas remplacer une constante avec la saisie de l'utilisateur. Remplacer
char str[] = ""
avecchar * str = malloc(<enough bytes for any possible input)
ou même apprendre de sécurité sur les Api.OriginalL'auteur bmargulies
Vous êtes seulement affecter un octet pour stocker l'entrée. La ligne
Alloue de zéro octets pour le contenu de la chaîne et un octet pour son terminateur null. Au lieu de cela, faire quelque chose comme
Ou quelle que soit la longueur maximale d'entrée sera.
OriginalL'auteur Keith Randall
Cette réponse est pour tout le monde qui est venu à C++ Java/C# ou quelques autres modernes langage Orienté Objet.
Pour moi cette question qui s'est passé pour la raison suivante:
J'ai créé ma propre classe C++.
MyClass.h
MyClass.cpp
Que mon intuition était que
propA
etpropB
sera simplement les propriétés privées, invisible à partir du code en dehors de cette classe.Le problème s'est avéré être que je n'ai pas mis
propA
etpropB
dansMyClass.h
.Le compilateur ne sait pas combien de mémoire il doit allouer quand
MyClass
est arriver instancié par les appelants.J'ai simplement ajouté les propriétés de l'en-tête
MyClass.h
:MyClass.h (fixe)
OriginalL'auteur ancajic