我正在尝试将指向队列的指针传递给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;
}
我也尝试像这样添加到新创建的队列中:
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;
}
来自主要功能:
int main()
{
struct pqueue *queue;
createQueue(queue);
add(queue, 234093, 9332);
}
...但我保持segfaulting。为什么这种情况一直在发生?
编辑:
pqueue和node的结构如下:
struct node {
int taskID;
int priority;
struct node *next;
};
struct pqueue{
struct node *root;
};
答案 0 :(得分:4)
在C中,所有内容都按值传递。因此,当您致电createQueue(queue)
时,您正在将指针的副本传递给该函数。然后,在函数内部,当您说queue = malloc(...)
时,您将指针的复制设置为等于新分配的内存 - 留下main()
的副本指针不变。
你想做这样的事情:
void createQueue(struct pqueue **queue)
{
(*queue) = malloc( ... );
}
int main(void)
{
struct pqueue *queue;
createQueue(&queue);
}
This question更详细地描述了您的错误。