free释放指针内存的问题

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    char* data;
    int capacity;
} SeqList;

int free_list1(SeqList *me) {
    free(me);
    me = NULL;
    return 0;

}
int free_list2(SeqList** me) {
    free(*me);
    *me = NULL;
    return 0;
}
int main(void) {
 
    SeqList *demo = malloc(sizeof(SeqList));
    demo->capacity = 10;
    free_list1(demo);
    //free_list2(&demo);
    printf("%d\n",demo->capacity);
    
    return 0;
}

在之前的学习中我们了解过值传递和地址传递的不同。但在此处,即使值传递情况下我们操作的是实参副本,但其指向仍是目标地址,free针对的正是目标地址,因此两种方式都可以实现free的效果,唯一的不同在于:

方式1采用值传递,所以 me = NULL 并没有改变实参指针的指向,而是改变了实参副本的指向。

方式2采用地址传递,所以 *me = NULL 可以修改指向,这两点与我们之前的学习是相符的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值