8
votes

Copier Char * à Char *

Voici une partie de mon code: xxx

Maintenant, lorsque j'appelle cette fonction de l'application externe, je reçois cette erreur:

AccessViolationException:
Tenté de lire ou d'écrire une mémoire protégée. C'est souvent une indication que l'autre mémoire est corrompue.

Le problème est dû à celui-ci: xxx

Comment puis-je affecter le lykey à p ?


1 commentaires

Où avez-vous alloué la mémoire au pointeur P?


4 Réponses :


10
votes

En réalité, le problème est strcy (p, s1.c_str ()); car p n'est jamais réglé sur rien mais null.


1 commentaires

@ ZEE99 Strcy vient de copie les données. p est un pointeur à la mémoire qui n'est pas attribuée. Par conséquent, lorsque vous vous copiez, il vous suffit de copier à la mémoire 0, ce qui est illégal.



8
votes

N'oubliez pas qu'un char * est juste une adresse d'un emplacement de mémoire. Vous devez avoir une mémoire allouée à l'adresse.

Dans votre code, vous n'avez pas la mémoire allouée à utiliser et que vous n'avez pas réglé P pour pointer sur cette adresse de mémoire.

Strcpy n'accepte pas de tampon, Il suffit de prendre une adresse mémoire pour copier les données à.

si vous passez un tampon dans la fonction, vous voulez probablement simplement ceci (et supprimer p) xxx


0 commentaires

12
votes

Vous devez pré-allouer la mémoire que vous passez à Strcpy . C'est à dire. un p = nouveau char [S1.Length () + 1]; le fera (+1 pour la terminaison de 0 caractère). Cependant, ce n'est pas une bonne idée de mélanger std :: string et C chaîne de chaîne sans bonne raison. Meilleur bâton avec std :: string , il vous évitera beaucoup de problèmes.

Aussi lyke = p ne fonctionnera pas non plus - il suffit de copie l'adresse locale de p dans la variable locale lyke . L'appelant ne verra même pas une différence.


3 commentaires

Et si je veux effectuer des modifications sur p, puis l'attribuer à Lyy? Disons: j'appelle méthodone (p); Et je veux ensuite attribuer le résultat à Lyy, comment puis-je faire ça?


Bonjour Alexander, je suis confronté à un problème similaire et j'ai trouvé votre réponse utile. J'ai une petite question: Pourriez-vous élaborer votre deuxième paragraphe s'il vous plaît? Que serait nécessaire au lieu de Lyy = P afin que l'appelant reçoive correctement la nouvelle valeur de Lyy? À votre santé


@ibiza: Lyy doit être un tampon alloué à l'appelant, puis vous pouvez strcpy . Prenez soin de ne pas courir au-dessus de la fin du tampon, cependant. Alternativement, utilisez un Char ** à la place et avez la fonction MALLOC un tampon suffisamment grand pour maintenir la chaîne.



0
votes
  1. Éliminer P (il ne fait rien ici) et copiez les données de S1 directement à lykey
  2. ne pas vous battre, mais le schéma d'indentation est une traversée, veuillez vous envoyer un bon style de quelque part (Google 1TBS)

0 commentaires