为何vs2008的字符数组不会自动释放

为什么vs2008的字符数组不会自动释放
本帖最后由 lvbu_shandong 于 2013-03-25 10:29:52 编辑
我写了一个程序,其中一部分是返回一个字符指针,我试图这样写,可写完后本以为字符数组会释放掉,但调试之后发现释放不了。
代码如下:

static unsigned int Pic_filenm = 1;  
static unsigned int Pic_filedir = 1;
CString Pic_prefileDir = "D:\\test\\pic\\";
CString Pic_fnm,Pic_fnmdir,Pic_filename; //这些是全局定义,用于函数操作

//函数定义
char* CVIDEOVIEW::PicSave()
{
if (Pic_filenm > 50)
{
Pic_filenm =1;
Pic_filedir++;
}

Pic_fnmdir.Format("%d",Pic_filedir);
Pic_fnm.Format("%d",Pic_filenm++);
CString Pic_towardDir = Pic_fnmdir + "\\";
int sign = this->Createfiledir(Pic_towardDir);
Pic_filename =  Pic_fnm +".jpg";
  CString Pic_name =Pic_prefileDir + Pic_towardDir + Pic_filename;
char pic_name [128];
strcpy(pic_name,(char*)(LPCTSTR)Pic_name);
  return pic_name;

}
这是调试结果:为何vs2008的字符数组不会自动释放
请大家帮忙给看看,我觉得,程序在执行return pic_name之后,char pic_name[128]会释放掉,为什么它还有值呢。
c++ 数组指针

------解决方案--------------------
为什么这么多人都觉得“内存释放后里面就没值了”呢?

------解决方案--------------------
要 } 执行完后才会释放.
而且释放也仅指别人会重新使用这块内存, 但在真正被写入之前它的值也不会变.
------解决方案--------------------
引用:
你好,我的标题已经说明了是vs2008,而且据我了解,如果变量中是这样的乱码,那他本身就是没有内容,被清空的含义了。
你的了解是错误的 
释放对象的内存 只是这块内存可以被其他地方使用的意思 
[因为能被其他地方使用 所以里面的值是什么是不可靠的]
没有清空内存的作用 没有置零内存的作用
------解决方案--------------------
引用:
很抱歉,因为是刚开始接触,只有通过单步调试来发现问题,解决问题,我不知道你是怎么判断问题出处的,如果不用监视窗口,那我怎么查看它里面的内容具体怎么个变化呢,如果你有好的建议,那烦请你说出来大家一起学习学习。很是感激。 

监视窗口可以用来观测变量的值,也仅仅是“可以用来观测”而已
它没资格说某个变量存在与否,它不能判断某块内存是否有意义,它甚至不能保证它自己的所有功能在所有情况下均有效
监视窗口,和其他各种各样的调试功能,都只是给你提供线索,如果你自己没能力利用这些线索,那就该去补充基础知识,而不是用你的“觉得”和“理解”来曲解这些线索

为什么数组不会自动释放?
最本质的答案就是“因为释放栈内存只是移动栈指针”,至于为什么这样,去看汇编语言和编译原理,先了解一下什么叫栈什么叫寄存器