在C中创建链接列表时程序崩溃



我在创建一个在C.中创建两个单独链表的函数时遇到问题

在我的程序中,用户逐个字符输入一个等式,如7+9*8,然后程序用它们列出列表。

代码如下:(Where place is Where is should in The list,data is The number/operator本身。两者都来自程序的另一部分(

struct trees {
char data;
int posicion;
struct trees *next;
struct trees *childI;
struct trees *childD;
};
struct trees *root;
struct trees *operador_uno;
struct trees *numero_uno;
char *numeros;
char *operadores;
int num, num_operadores;

void crearLista(int place, char data) {
int i;
struct trees *temp1 = (struct trees *)calloc(1, sizeof(struct trees));
temp1->data = data;
if(place == 0) {
if((data == '/') || (data == '*') || (data == '+') || (data == '-')){
temp1->next = operador_uno;
operador_uno = temp1;
}
else {
temp1->next = numero_uno;
numero_uno = temp1;
}
}
else {
struct trees *temp2;
if((data == '/') || (data == '*') || (data == '+') || (data == '-')) {
struct trees *temp2 = operador_uno;
}
else {
struct trees *temp2 = numero_uno;
}
for(i = 0; i < place - 1; i++) {
temp2 = temp2->next; // [CRASH]
}
temp1->next = temp2->next;
temp2->next = temp1; // [CRASH]
}

for(i = 0; i < place && place != 0; i++) {
struct trees *temp1 = operador_uno;
temp1 = temp1->next;
}
for(i = 0; i < place + 1; i++) {
struct trees *temp2 = numero_uno;
temp2 = temp2->next;
}
}

我通过大量的printf语句确定,它将成功地将等式中的第一个数字添加到列表中,如何不添加第一个运算符,以及使用第二个数字,程序完全崩溃。

崩溃问题似乎发生在我写[CRASH]的地方,当我放入temp2->next=temp1时。

非常感谢您的帮助!

可能不是唯一的问题,但:

struct trees *temp2;
if((data == '/') || (data == '*') || (data == '+') || (data == '-')) {
struct trees *temp2 = operador_uno;  // not the same "temp2" as above
}
else {
struct trees *temp2 = numero_uno;  // not the same "temp2" as above
}
for(i = 0; i < place - 1; i++) {
temp2 = temp2->next; // [CRASH] because temp2 isn't initialized
}

struct trees *temp2 = operador_uno;是在外部作用域中声明的遮蔽temp2。因此,外部temp2从未初始化,您的初始化为超出范围的变量设置了一个值。

因此,删除struct trees *,以便使用(并初始化(相同的temp2变量,如下所示(不过,我更喜欢三元表达式(:

if((data == '/') || (data == '*') || (data == '+') || (data == '-')) 
{
temp2 = operador_uno;
}
else 
{
temp2 = numero_uno;
}

打开编译器警告,它会告诉你:

  • 您正在使用未初始化的外部temp2
  • 您没有使用内部temp2变量

相关内容

  • 没有找到相关文章

最新更新