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?

È stato utile?

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);?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top