void fun() { char* s = (char*)malloc(100); }
操作系统为程序分配空间分栈和堆~~ "定义"局部普通变量和局部指针变量时,只是在栈里分配了块空间,由高地址向低地址扩展,在函数调用结束后自动释放。而定义全局变量,静态变量,指针用malloc或new分配空间是在堆里分配的,除非是程序完全退出才释放,而malloc或new的要想用完就释放的调用free和delete来释放~~~
char* s = (char*)malloc(100); //开辟了两个空间,S在栈中,malloc(100)在堆中
指针s是局部指针变量(在栈中分配),所以执行完 fun函数后S已弹栈(既释放),而堆中申请的malloc(100)没有释放 ,必须由程序员释放, 若程序员不释放(会造成内存泄漏),程序结束时可能由OS回收.
S已经被释放,但内存没有收回。内存泄露!
说白了:就是S这个变量被删除了,不能再使用了,但它申请的那快内存切还是有效的,可以使用。但是拿什么去使用它?(S都没有了)。可以在后面加return s(当然函数的void要改掉,然后用个变量去接受传回来的内存地址!)
原文:http://www.cnblogs.com/xunbu7/p/4931153.html