gpt4 book ai didi

C 结构体包含脏数据,我不明白为什么?

转载 作者:行者123 更新时间:2023-11-30 17:26:32 25 4
gpt4 key购买 nike

我有以下代码,它执行插入到我称为 symrec(代表符号记录)的结构中的操作。

symrec *createSymStruct(char const * varName, type * type, symrec ** tabella){
symrec * s;
printf("creating new varibale for struct\n");
char * variableName = malloc(strlen(varName)+1);
strcpy(variableName,varName);
s = getsymStruct(variableName, *tabella);
if (s == 0){
printf("putting symbol into table\n");
s = putsymStruct(variableName, NULL, &(*tabella));
}
s->tipo = type;
return s;
}

被调用的函数是

symrec 
*putsymStruct(char const * identifier, type * tipo, symrec ** tabella){
printf("\tputting symbol in the table\n");
symrec *ptr = (symrec *) malloc (sizeof (symrec));
ptr->name = (char *) malloc (strlen (identifier) + 1);
strcpy (ptr->name,identifier);
ptr->tipo = (type*)malloc(sizeof(type));
ptr->tipo = tipo;
ptr->next = (symrec*)tabella;
*tabella = ptr;
return ptr;
}

目前我只有一个这种类型的函数调用,我构建了一个函数来打印符号表的值

void readTable(symrec * tabella){
printf("PRINTING TABLE\n");
if(tabella == NULL){
printf("table is empty\n");
}
symrec *ptr;
for (int i = 0; i < 20; i ++) {
printf("_");
}
printf("\n");
for (ptr = tabella; ptr != (symrec *) 0;
ptr = (symrec *)ptr->next){

printf("|\t%*s\t|\n",20,ptr->name);
}

printf("\n");
}

令人惊讶的是,当打印表格时,我发现了一个我没有放置的变量,它更可能是内存空间未清理或声明中我做错了。.以下是输出..可以你帮我找出问题出在哪里吗?有什么提示吗?我在分配时没有清理内存还是什么?

PRINTING TABLE
____________________
| ciao |
| ?:?0? |

最佳答案

这听起来不对。

ptr->next = (symrec*)tabella;

也许你的意思是

ptr->next = *tabella;

另外,

ptr->tipo = tipo;

导致内存泄漏。上一行中 malloc() 返回的值丢失。

关于C 结构体包含脏数据,我不明白为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745716/

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