函数退出后,堆栈指针变化了,但是堆栈(一片内存)中的数据并没有立即释放或改变。如果函数退出后到WM_MYMSG消息被处理前 以及 该消息被处理的过程中,该函数所分配堆栈处的内存没有被其他函数、线程、进程使用,即没有写操作,那么str[128]中的数据依然存在。所以根据该内存物理地址读出数据的结果是正确的。但是这样的设计危险的!谁能保证该片内存不会被修改呢?而且这样的设计不符合逻辑,临时变量的作用域超出了规范所规定的范围。好像侯捷《深入浅出mfc》中讲c++的时候有讲到这一点。
解决方案 »
- 在vc中打开指定的目录,在debug模式下总报错,而release模式下就正常,这个什么情况,求指导?
- 发送鼠标停留消息 有大神知道么?坐等啊..
- 关于安全登录邮箱或ftp的问题
- 在使用chttpfile 类还获取网址上的内容的时候,在url为http ://www.163.com 或http://www.sina.com.cn 的时候 获得的文件内容为乱码呢?
- 两个记录集指针指向同一条记录
- 有关grid的问题,紧急求助!100分
- vci不用mfc访问数据库----在线等
- 如何制作具有声音效果的桌面
- 奇怪的编译错误?请教各位高手
- 请教高手,这个小程序怎么错了:(
- vc初学者好书请求推荐
- 请教exe文件执行过程?
问题继续,请注意上述循环
while(1) {
if(...) return 0;
char str[128];
...
::PostMessage((HWND)lParam,WM_MYMSG,(WPARAM)&str,0);
}
我认为当PostMessage()结束,开始新一轮while循环时,str[128]已经超出生存期 ,且在新的周期中堆栈当然被重用.那么在主控程序处理消息时,得到的数据应该是错乱的才合逻辑,可惜事实不是这样。
我在while循环中设置了计数,并将每次的str[128]输出到文件;在主控程序收到消息通知后,也同样处理。结果是:两个计数相等,两个输出文件相同。