gpt4 book ai didi

c - 尝试将结构传递给函数时保持段错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:32:16 24 4
gpt4 key购买 nike

我试图将一个指向队列的指针传递给 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);
}

...但我一直在出现段错误。这种情况持续发生的原因是什么?

编辑:

pqueue 和 node 的结构是这样的:

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

struct pqueue{
struct node *root;
};

最佳答案

在 C 中,一切都是按值传递的。因此,当您调用 createQueue(queue) 时,您将指针的副本 传递给该函数。然后,在函数内部,当您说 queue = malloc(...) 时,您将指针的 copy 设置为等于新分配的内存 - 留下 main() 未更改该指针的副本。

你想做这样的事情:

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

int main(void)
{
struct pqueue *queue;

createQueue(&queue);
}

This question对您的问题进行了更详细的描述。

关于c - 尝试将结构传递给函数时保持段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19280753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com