【发布时间】:2021-03-24 16:10:20
【问题描述】:
所以,基本上这篇文章末尾的代码是我第一次尝试实现一些并行队列。
我使用相同的函数 createBase() 创建了结构“fila1”和“fila2”,该函数使用“malloc”分配内存空间。
这两个结构都是以相同的方式创建的,并且似乎是正确创建的。但是,该函数打印“hellou”,但不打印“hi”,两者都应该打印。
尝试调试,发现当我的程序进入“while”循环时,第二个“fila2”改变了它的内存地址,也改变了它的孩子的值,它们不再指向“NULL”。我不明白为什么。 “fila1”仍然可以正常工作。
哦,差点忘了,这是代码。 我用作输入命令 =“a”。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Member {
struct Member *next;
};
struct Base{
struct Member *begin, *end;
};
//Funcoes
struct Base* createBase(){
struct Base *new;
new = (struct Base*)malloc(sizeof(struct Base));
if (new != NULL) {
new->begin = NULL;
new->end = NULL;
}
return new;
};
int main(void) {
char command[1];
struct Base *fila1, *fila2;
struct Base *createBase();
fila1 = createBase();
fila2 = createBase();
while(scanf("%s", &command) != EOF) {
if (fila1->begin == NULL) {
printf("hellou");
}
if (fila2->begin == NULL) {
printf("hi");
}
}
return 0;
}
【问题讨论】:
-
char command[1];很可能不足以容纳您的命令。 -
可能是 file2->begin = NULL 中缺少的 = 吗?那应该是 ==
-
main中
struct Base *createBase();这行的用意是什么? -
@MortenJensen,
createBase()不初始化begin成员吗? -
scanf()溢出command如果输入太长。尽管这更有可能导致段错误。在任何情况下,scanf()在这里都不会做任何事情,因此您不妨将其删除,作为隔离问题的一部分。
标签: c