1. 字符串变量所占的内存块数据不会被自动释放:
在c语言中,定义一个 char* c=“abc”,然后有让c=“efg”,这个过程,实际上是让系统开辟一个值为abc的内存块,让c指向之,然后又开辟一个值为efg的内存块,让c重新指向之。。但之前那个值为abc的内存区域,其数据没有被清空。。(稍后我会实验 验证一下)
2.函数结束后,函数内定义的变量,其所占内存不会被释放。
如果我有一个 test 函数,里面有个 局部变量 i ,我们在main中调用 test ,你会发现 test 的调用结束后,i 所占的内存空间依然有数据。
详情可观此实验:
int* testMemFreeInt();
#include <stdio.h>
int main()
{char* c="abc"; //c指向支付串 1234
int* pointer_i;
printf("c adress %d \n", c ); // 输出 c 的地址 ,我电脑中为4199239
c="efg"; //让c重新指向另一个 字符串
printf("c new adress %d \n",c); //再次输出c的地址,你会发现c的地址成立4199258
/*以上地址都是我电脑里的,请要测试的朋友执行根据自己电脑改地址*/
printf("c old adress value is %s \n",(char*)4199239);
/*但从原来的地址中取值,发现旧地址中的内容还没清空*/
pointer_i=testMemFreeInt();
//pointer_i指向的是testMemFreeInt里的变量i的地址
printf("i old adress value is %d \n",*pointer_i);
/* 尽管函数已结束,但函数中定义的变量i所占用的内存没有被释放,里面还有值*/
return 0;
}
int* testMemFreeInt()
{int i=123;
printf("i adress %d \n", &i);
return &i; //函数结束后,将i的地址返回去处
}
