wushi 发表于 2017-11-5 18:02:10

free()函数释放ptr参数所指向的内存空间到底是什么意思

其他的代码就省略了,{:5_107:}

int* ptr = (int *)malloc(sizeof(int));

*ptr = 110;

free(ptr);

free之后,ptr指针还会存在吗? 整数110还在吗? ptr所指的空间会怎么样?
谢谢回答!

BngThea 发表于 2017-11-5 18:24:08

指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用

wushi 发表于 2017-11-5 19:46:33

BngThea 发表于 2017-11-5 18:24
指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用

释放之后再*ptr = 220;那么原先的110会变为220吗?

BngThea 发表于 2017-11-5 19:49:01

wushi 发表于 2017-11-5 19:46
释放之后再*ptr = 220;那么原先的110会变为220吗?

wushi 发表于 2017-11-5 19:53:26

BngThea 发表于 2017-11-5 18:24
指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用


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

int main(void)
{
        int *ptr;
       
        ptr = (int *)malloc(sizeof(int));
        *ptr = 110;
        printf("%d\n", *ptr);
        free(ptr);

        printf("%d\n", *ptr);

        return 0;       
}

结果是第一个打印出110,第二个打印出随机数,不是说ptr指向没变,整数110也在原来的内存中吗,为什么释放之后第二次打印出随机数

BngThea 发表于 2017-11-5 19:59:51

wushi 发表于 2017-11-5 19:53
结果是第一个打印出110,第二个打印出随机数,不是说ptr指向没变,整数110也在原来的内存中吗,为什么释放 ...

因为椎中信息释放了,就有可能被其他程序占用,你可以试着打印地址看看

丶忘却的年少o 发表于 2017-11-5 20:00:46

ptr在,数据110应该是不在了,ptr指向的地址仍不变。
可以写个代码试试,ptr指向一直是不变的,但是因为free释放了地址所存储的空间,数据也就被释放。
#include <stdio.h>
#include <stdlib.h>

int main()
{
        int *ptr;
       
        ptr = (int *)malloc(sizeof(int));

        *ptr = 110;
        printf("释放前:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

        free(ptr);
        printf("释放后:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

        *ptr = 220;
        printf("重新赋值:\n *ptr = %d\tptr = %p\n", *ptr, ptr);

        return 0;
}

wushi 发表于 2017-11-5 21:02:59

丶忘却的年少o 发表于 2017-11-5 20:00
ptr在,数据110应该是不在了,ptr指向的地址仍不变。
可以写个代码试试,ptr指向一直是不变的,但是因为fr ...

谢谢

丶忘却的年少o 发表于 2017-11-5 21:13:02

wushi 发表于 2017-11-5 21:02
谢谢

不用客气{:10_329:}
页: [1]
查看完整版本: free()函数释放ptr参数所指向的内存空间到底是什么意思