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.