Comment résoudre une violation d'accès en écrivant une erreur de localisation?
J'ai un programme simple et je reçois violation d'accès à *(str + start)
. Pourquoi? Je devrais être en mesure de le changer. Droit?
void fn()
{
char *str = "Hello wordl!";
int end = strlen(str);
int start = 0;
end--;
while(start < end)
{
*(str + start) = *(str + end); <--- Access violation writing location *(str + Start).
end--;
start++;
}
}
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
char *str = "Hello World";
est un const string, et ne peut pas être modifié. Le compilateur est libre de le mettre dans une situation de non-emplacement accessible en écriture, résultant dans le crash de vous voir.Remplacement de la déclaration avec
char str[] = "Hello World";
devrait faire ce que vous voulez, mettre la chaîne dans une modifiables tableau sur la pile.Non, vous ne devriez pas. "Hello world" est une constante chaîne de caractères littérale, vous avez besoin d'allouer de la mémoire à l'aide de malloc() en C, ou nouveau en C++ si vous voulez vous souvenir que vous êtes libre de modifier.
Comme d'autres l'ont souligné, les chaînes littérales peuvent être stockées dans un champ en lecture seule de la mémoire. Êtes-vous de la compilation avec les avertissements allumé? Vous devriez obtenir un message d'avertissement à propos de rejeter le constness de la chaîne littérale.
Ce que vous pouvez faire à la place est:
C'est parce que vous êtes en train de rédiger un littéral de chaîne de stockage, qui peut être dans une zone protégée de la mémoire.