0
votes

Affectation de la structure en C

La fonction suivante de convolution , args le pointeur de la structure correspondante est passé et je dois ensuite l'attribuer à une autre structure du même genre. Est-il correct d'assigner comme indiqué ci-dessous ou est-il nécessaire d'initialiser la mémoire pour arguments réels . xxx


3 commentaires

Quel est ton but? Voulez-vous copier la structure?


réal_args devient la même valeur comme le pointeur Void * transmis. Il pointe vers la même objet. Si vous essayez d'initialiser la mémoire, vous détruirez les données.


Voulez-vous simplement un pointeur pratique à la structure de l'appelant? Avez-vous besoin de votre propre copie de la structure? La copie doit-elle persister après convolution renvoie ou est-ce juste temporaire?


3 Réponses :


0
votes

void * Les pointeurs sont automatiquement convertis à tous les autres types de pointeur (à l'exception des pointeurs de fonction), il vous suffit d'initialiser la mémoire, si l'appelant ne l'a pas fait.


2 commentaires

Il est donc nécessaire d'attribuer la mémoire comme suit avant d'assigner le pointeur de vide. Compute_Convfwd * Actual_args = MALLOC (Tailleof (* Actual_args));


Non, comme l'appelant doit déjà attribuer la mémoire requise.



2
votes

Pour copier la structure, vous devez le faire (soit) xxx

ou: xxx

et une cerise sur le dessus, d'autres Appelez ceci ... eh bien, dites moins que jolie. xxx

EDIT: Bien sûr, d'autres possibilités existent également, mais ce sont les plus simples.


0 commentaires

0
votes

Le pointeur args de la structure correspondante est passé et j'ai besoin de Attribuez-le à une autre structure du même genre. Est-il correct d'assigner comme donné ci-dessous ou est-il nécessaire d'initialiser la mémoire pour réelle args. p>

compute_convFWD* p_actual_args = (compute_convFWD*)malloc(sizeof(*(compute_convFWD*)args));

*p_actual_args = *((compute_convFWD*)args); // this initializing can be done with memset also

0 commentaires