c - 在 C 中将队列称为指针
问题描述
我对C相当陌生,对指针的概念感到困惑。我写了两组不同的代码,只有一个工作,我想知道问题出在哪里。
void reverseStack(Stack *s)
{
/* add your code here */
Queue *q;
q->ll.head = NULL;
q->ll.tail = NULL;
q->ll.size = 0;
while(!(isEmptyStack(s))){
enqueue(q,pop(s));
}
while(!(isEmptyQueue(q))){
push(s,dequeue(q));
}
}
当我将队列称为指针编辑时,上述内容不起作用:return segfault
void reverseStack(Stack *s)
{
/* add your code here */
Queue q;
q.ll.head = NULL;
q.ll.tail = NULL;
q.ll.size = 0;
while(!(isEmptyStack(s))){
enqueue(&q,pop(s));
}
while(!(isEmptyQueue(&q))){
push(s,dequeue(&q));
}
}
但是,这有效。编辑:返回反向堆栈
两个代码的功能是否相同?为什么结果不同呢?
旁注:我在这个程序中给出的函数类似于这个问题中列出的函数 Reversing a stack using queue in C
解决方案
你从来没有分配一个队列q
来指向!它只是指向随机内存,如果您尝试使用它,可能会导致段错误。你必须给它分配一些东西。
您可以静态或动态分配一个。
静止的:
Queue staticQueue;
Queue *q = &staticQueue;
动态的:
Queue *q = malloc(sizeof(Queue));
注意:如果使用staticQueue
,则不能返回指针,因为函数返回时队列将被删除。如果您使用动态,请free()
在完成后记住它!
推荐阅读
- iphone - 在pjsip iPhone中从前到后切换相机
- mysql - 如何从两个表中获取计数结果
- ruby-on-rails - 带有 gem ruby-oci8 的 Oracle 即时客户端无法与 Rails c 中的数据库连接
- python - 每次循环迭代后内存增加
- python - 我的点子没有正确下载包
- r - 如何修复以下代码中未找到的对象?
- sql - LIKE 运算符在 SQL (MS-Access) 中不起作用
- c++ - 为什么循环打印到 11 而不是 10?
- java - 无论如何调用排除模式的 Spring Boot 拦截器
- python - 将networkx图输入zss算法(树编辑距离)