#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char *get_str2(){
char *tmp = (char *)malloc(100); //首先栈匀tmp分配100个字节在堆区,拿到了0x11地址,指向0x11所指向的内存区域
if (tmp == NULL){
return NULL;
}
strcpy(tmp, "abs"); //把"abs“里面的内容拷贝到tmp的内存空间,
return tmp;
}
int main(void){
char *p = NULL;
p = get_str2(); //返回给p,p也拿到0x11这快地址,然后p也指向0x11这片内存,get_str2()运行完就释放了,
堆区要手动释放
/*关于堆区释放,不是说里面的内容都没有了,而是告诉操作系统
里面的空间可以使用了,本来p指向这片内存空间,释放以后,解除指向关系
*/
if (p != NULL){
printf("p=%s\n", p);
free(p);//指针已经释放了,单还是指向原来的内容
p = NULL;
if (p != NULL){
free(p);
}
}
printf("\n");
system("pause");
return 0;
}