free()函数释放ptr参数所指向的内存空间到底是什么意思
其他的代码就省略了,{:5_107:}int* ptr = (int *)malloc(sizeof(int));
*ptr = 110;
free(ptr);
free之后,ptr指针还会存在吗? 整数110还在吗? ptr所指的空间会怎么样?
谢谢回答! 指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用 BngThea 发表于 2017-11-5 18:24
指针还在,数据也在,甚至指针指向也没变
但是椎中的这段内存被释放了,可以被其他程序申请使用
释放之后再*ptr = 220;那么原先的110会变为220吗? wushi 发表于 2017-11-5 19:46
释放之后再*ptr = 220;那么原先的110会变为220吗?
会 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也在原来的内存中吗,为什么释放之后第二次打印出随机数 wushi 发表于 2017-11-5 19:53
结果是第一个打印出110,第二个打印出随机数,不是说ptr指向没变,整数110也在原来的内存中吗,为什么释放 ...
因为椎中信息释放了,就有可能被其他程序占用,你可以试着打印地址看看 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;
} 丶忘却的年少o 发表于 2017-11-5 20:00
ptr在,数据110应该是不在了,ptr指向的地址仍不变。
可以写个代码试试,ptr指向一直是不变的,但是因为fr ...
谢谢 wushi 发表于 2017-11-5 21:02
谢谢
不用客气{:10_329:}
页:
[1]