为何vs2008的字符数组不会自动释放
为什么vs2008的字符数组不会自动释放
我写了一个程序,其中一部分是返回一个字符指针,我试图这样写,可写完后本以为字符数组会释放掉,但调试之后发现释放不了。
代码如下:
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;
}
这是调试结果:
。
请大家帮忙给看看,我觉得,程序在执行return pic_name之后,char pic_name[128]会释放掉,为什么它还有值呢。
------解决方案--------------------
为什么这么多人都觉得“内存释放后里面就没值了”呢?
------解决方案--------------------
要 } 执行完后才会释放.
而且释放也仅指别人会重新使用这块内存, 但在真正被写入之前它的值也不会变.
------解决方案--------------------
你的了解是错误的
释放对象的内存 只是这块内存可以被其他地方使用的意思
[因为能被其他地方使用 所以里面的值是什么是不可靠的]
没有清空内存的作用 没有置零内存的作用
------解决方案--------------------
监视窗口可以用来观测变量的值,也仅仅是“可以用来观测”而已
它没资格说某个变量存在与否,它不能判断某块内存是否有意义,它甚至不能保证它自己的所有功能在所有情况下均有效
监视窗口,和其他各种各样的调试功能,都只是给你提供线索,如果你自己没能力利用这些线索,那就该去补充基础知识,而不是用你的“觉得”和“理解”来曲解这些线索
为什么数组不会自动释放?
最本质的答案就是“因为释放栈内存只是移动栈指针”,至于为什么这样,去看汇编语言和编译原理,先了解一下什么叫栈什么叫寄存器
我写了一个程序,其中一部分是返回一个字符指针,我试图这样写,可写完后本以为字符数组会释放掉,但调试之后发现释放不了。
代码如下:
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;
}
这是调试结果:
请大家帮忙给看看,我觉得,程序在执行return pic_name之后,char pic_name[128]会释放掉,为什么它还有值呢。
c++
数组指针
------解决方案--------------------
为什么这么多人都觉得“内存释放后里面就没值了”呢?
------解决方案--------------------
要 } 执行完后才会释放.
而且释放也仅指别人会重新使用这块内存, 但在真正被写入之前它的值也不会变.
------解决方案--------------------
你的了解是错误的
释放对象的内存 只是这块内存可以被其他地方使用的意思
[因为能被其他地方使用 所以里面的值是什么是不可靠的]
没有清空内存的作用 没有置零内存的作用
------解决方案--------------------
监视窗口可以用来观测变量的值,也仅仅是“可以用来观测”而已
它没资格说某个变量存在与否,它不能判断某块内存是否有意义,它甚至不能保证它自己的所有功能在所有情况下均有效
监视窗口,和其他各种各样的调试功能,都只是给你提供线索,如果你自己没能力利用这些线索,那就该去补充基础知识,而不是用你的“觉得”和“理解”来曲解这些线索
为什么数组不会自动释放?
最本质的答案就是“因为释放栈内存只是移动栈指针”,至于为什么这样,去看汇编语言和编译原理,先了解一下什么叫栈什么叫寄存器