Quale dovrebbe essere il modo corretto per assegnare un valore a un puntatore nullo * non vuota in C?
-
30-09-2019 - |
Domanda
Ho il seguente codice:
void funcA(void* pArg)
{
STRUCTA abc;
.
. // Some processing here
.
if (pArg)
(STRUCTA *)pArg = abc;
}
il problema è, questo codice sta gettando il seguente avviso: warning: obiettivo di assegnazione non proprio un lvalue; questo sarà un errore hardware in futuro
Senza il cast, vado a prendere un altro avvertimento che sto cercando di risolvere il riferimento un puntatore nullo ...
Come avvertimenti vengono trattati come errori, non posso usare questo codice - Ma io davvero non è possibile utilizzare qualsiasi altro tipo di puntatore che * vuoto come argomento. C'è una soluzione elegante che mi manca?
C'è un modo per fare questo lavoro?
Soluzione
si sta assegnando un STRUCTA
a un puntatore a STRUCTA
.
Piuttosto che fare:
*((STRUCTA *)pArg) = abc;
Altri suggerimenti
(STRUCTA *)pArg
è di tipo puntatore, mentre abc
non lo è. È necessario dereference il puntatore:
*(STRUCTA *)pArg = abc;
Prova questo:
memcpy(pArg, &abc, sizeof(abc));
Tuttavia è necessario fare in modo che PARG punti a sizeof (abc) byte di memoria allocata.
Forse pArg = (void *) abc;
?
EDIT:
pArg = (void *) (&abc);
?