Voici une partie de mon code: Maintenant, lorsque j'appelle cette fonction de l'application externe, je reçois cette erreur: p> AccessViolationException: Le problème est dû à celui-ci: p> Comment puis-je affecter le
Tenté de lire ou d'écrire une mémoire protégée. C'est souvent une indication que l'autre mémoire est corrompue. P>
blockquote> lykey code> à
p code >? p> p>
4 Réponses :
En réalité, le problème est strcy (p, s1.c_str ()); code> car
p code> n'est jamais réglé sur rien mais null. p>
@ 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.
N'oubliez pas qu'un 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. p> si vous passez un tampon dans la fonction, vous voulez probablement simplement ceci (et supprimer p) p> char * code> est juste une adresse d'un emplacement de mémoire. Vous devez avoir une mémoire allouée à l'adresse.
Strcpy code> n'accepte pas de tampon, Il suffit de prendre une adresse mémoire pour copier les données à. p>
Vous devez pré-allouer la mémoire que vous passez à Aussi Strcpy code>. C'est à dire. un
p = nouveau char [S1.Length () + 1]; code> le fera (+1 pour la terminaison de 0 caractère). Cependant, ce n'est pas une bonne idée de mélanger
std :: string code> et C chaîne de chaîne sans bonne raison. Meilleur bâton avec
std :: string code>, il vous évitera beaucoup de problèmes. P>
lyke = p code> ne fonctionnera pas non plus - il suffit de copie l'adresse locale de
p code> dans la variable locale
lyke code>. L'appelant ne verra même pas une différence. P>
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 code>. Prenez soin de ne pas courir au-dessus de la fin du tampon, cependant. Alternativement, utilisez un
Char ** code> à la place et avez la fonction
MALLOC code> un tampon suffisamment grand pour maintenir la chaîne.
Où avez-vous alloué la mémoire au pointeur P?