gpt4 book ai didi

关于c中的free(指针)的困惑

转载 作者:行者123 更新时间:2023-11-30 15:47:02 25 4
gpt4 key购买 nike

我正在尝试使用指针实现堆栈,结构定义在下面的代码中。我调用了 push() 函数来插入三个元素(例如:2、4、6)。然后,我调用函数 display()。它仅显示 0。我发现原因是因为我的 push() 函数中的 free() 函数。但是,我不知道那里到底发生了什么。我是否应该使用 free() 来释放代码中 temp 使用的已分配内存?如果是这样,为什么?

#include<stdio.h>
//#include<unistd.h>
#include<stdlib.h> // malloc ,calloc, free avail here
void push();
void pop();
void display();
struct stack {
int data;
struct stack *next;
};

struct stack *start = NULL;

void push()
{
int ele;
struct stack *temp, *p;
printf("entere the element\n");
scanf("%d", &ele);
temp = (struct stack *) malloc(sizeof(struct stack));
temp->data = ele;
if (start == NULL) {
start = temp;
start->next = NULL;
} else {
p = start;
while (p->next != NULL) {
p = p->next;
}
p->next = temp;
temp->next = NULL;
}
free(temp);
}

最佳答案

void push(){
int ele;
struct stack *temp,*p;
printf("entere the element\n");
scanf("%d",&ele);
temp=(struct stack *)malloc(sizeof(struct stack ));
temp->data=ele;
if(start==NULL){
start=temp;
start->next=NULL;
}
else{
p=start;
while(p->next !=NULL){
p=p->next;
}
p->next=temp;
temp->next=NULL;
}
free(temp); // don't free temp here !
}

仅当不再需要指针时才必须释放它。您可能会认为情况确实如此,因为您没有使用 temp,但事实并非如此。 free的参数是一个有效的内存地址。 temp 是一个有效的内存地址,但您将 temp 分配给 start !所以:free(tmp)free(start) 相同,但这不是您想要的。

关于关于c中的free(指针)的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17818975/

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