【发布时间】:2015-01-20 16:28:47
【问题描述】:
我正在尝试使用 malloc 创建一个列表,程序获取用户输入的整数,并在用户输入 0 时退出。但是我遇到了 Segmentation fault (core dumped) 错误,我没有没能发现问题。我尝试过的事情包括添加“liberar”方法来释放内存,但它也不起作用。谢谢!
#include<stdlib.h>
#include<stdio.h>
struct list1 {
int val;
struct list1 * sig;
};
typedef struct list1 i;
void main() {
i * aux, * cabeza;
int entrada;
cabeza = NULL;
while(1) {
aux = (i*)malloc(sizeof(i));
scanf("%d\n",entrada);
if(entrada==0){
exit(0);
}
aux->val = entrada;
aux->sig = cabeza;
cabeza = aux;
liberar(cabeza);
}
aux = cabeza;
while(aux) {
printf("%d\n", aux->val);
aux = aux->sig ;
}
}
int liberar(struct list1* cabez)
{
struct list1 *temp;
while (cabez != NULL)
{
temp = cabez;
cabez = cabez->sig;
free(temp);
}
}
【问题讨论】:
-
scanf("%d\n",entrada);-->scanf("%d", &entrada);和i * cabeza = NULL;cabeza 需要初始化。和liberar(cabeza);删除。 -
i是一个糟糕的类型别名名称... -
你为 aux 分配空间,将 aux 分配给 cabeza(这些只是指针,释放 cabeza(和 aux)指向的空间,然后再次使用 aux,即使它指向的内容已被释放. 那是行不通的
-
1) 英文变量名更容易理解:entrada == input?卡贝萨 == ??? 2) malloc() 可能会失败。你必须检查结果。 3)您在知道需要它之前为 aux 分配列表元素。在 (entrada==0) 的情况下,您将泄漏内存(假设稍后您执行 exit(0) 以外的其他操作)
-
@BLUEPIXY 是的!那是错误,我只是添加了&并删除了方法,谢谢!
标签: c list segmentation-fault malloc