Conserver les erreurs de segmentation en essayant de passer struct en function

J’essaie de passer un pointeur sur une queue à la fonction createQueue:

void createQueue(struct pqueue *queue){ queue = malloc( sizeof(struct pqueue) ); queue->root = malloc(sizeof(struct node)); queue->root->next = 0; queue->root->taskID = 12; queue->root->priority = 5000; } 

J’essaie aussi d’append à la nouvelle queue comme ceci:

 void add(struct pqueue *queue, int taskID, int priority){ struct node *conductor; conductor = queue->root; if ( conductor != 0 ) { while ( conductor->next != 0) { conductor = conductor->next; } } conductor->next = malloc( sizeof(struct node) ); conductor = conductor->next; if ( conductor == 0 ) { printf( "Out of memory" ); } /* initialize the new memory */ conductor->next = 0; conductor->taskID = taskID; conductor->priority = priority; } 

de la fonction principale:

 int main() { struct pqueue *queue; createQueue(queue); add(queue, 234093, 9332); } 

… mais je continue à me défaire. Une raison pour laquelle cela continue à arriver?

MODIFIER:

Les structures pour pqueue et node sont comme ceci:

 struct node { int taskID; int priority; struct node *next; }; struct pqueue{ struct node *root; }; 

En C, tout est passé par valeur. Par conséquent, lorsque vous appelez createQueue(queue) , vous transmettez une copie du pointeur à la fonction. Ensuite, dans la fonction, lorsque vous dites queue = malloc(...) , vous définissez cette copie du pointeur égale à la mémoire que vous venez d’allouer, laissant main() copie de main() de ce pointeur inchangée.

Vous voulez faire quelque chose comme ça:

 void createQueue(struct pqueue **queue) { (*queue) = malloc( ... ); } int main(void) { struct pqueue *queue; createQueue(&queue); } 

Cette question contient une description plus détaillée de ce qui ne va pas pour vous.