J'ai trouvé un extrait de code où un pointeur char (par exemple * pData) est déclaré sans être initialisé à NULL.Affectation de valeur au pointeur non initialisé AVANT de déréférencer
char *pData, *pData2;
char string[10] = "Hello"
pData2 = &string[0];
SomeFuntionToAssignValue(pData2, &pData);
SomeFuntionToAssignValue(char *pData2, char **pData)
{
if (something)
{
*pData = pData2;
}
else if (something)
{
*pData = &pData2[some calculation]
}
}
peut déréférencement pData, après avoir appelé SomeFuntionToAssignValue fonction(), à tout moment lancer une erreur « exception d'accès mémoire »? Parce que pendant la compilation ou le test local (ici le test est effectué dans des cibles qui peuvent être rechargées à tout moment, donc les risques de corruption de la mémoire diminuent), nous n'avons pas rencontré d'erreur "memory access exception".
Mais au cours des essais dans l'environnement sur le terrain, où la cible n'a pas été rechargées pendant au moins le temps d'une semaine, une erreur « d'exception d'accès mémoire » a été lancée.
Alors, est-il possible que ne pas faire char *pData = NULL
aurait pu provoquer l'erreur « d'exception d'accès mémoire »?
C ne possède pas d '"exceptions d'accès à la mémoire" sauf si vous spécifiez une plateforme, une architecture et un compilateur. –
Appelez votre fonction comme vous le montrez, il sera prudent d'utiliser 'pData' après l'appel. –
@Someprogrammerdude - Safe si 'certains donnent calculation' résultat dans la gamme [0, strlen (pData2)] –