导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

SysAllocString分配的字符串,用SysFreeString释放后,为什么在内存中还有?

zou_chao 2002-07-22 03:52:07
我在程序中定义了一个BSTR型的变量m_bstrMsg。当有错误信息时,使用SysAllocString分配字符串,在分配之前我先调用SysFreeString来释放以前分配的字符串。但在调试时,通过Memory窗口发现m_bstrMsg并没有被销毁,它的值还在。这是怎么一回事?
...全文
221 点赞 收藏 9
写回复
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
toxyboy 2002-07-24
SysFreeString((BSTR)Test);
Test = 0;
因该是这样。。

回复
FFXI 2002-07-24
楼上的总结很精辟!!
回复
deadhorse 2002-07-24
我觉得楼上几位说得都有道理,但是也有一些错误,说说我的看法
1,内存释放是表示使用权的释放,与里面的内容没有关系。
2,内存释放,release版不会对任何区域重新填充,包括指针本身,这是为了效率
3,将指针使用完以后设为null完全是一种自我的约定,也就是告诉自己是否已经释放过,如果你能保证不会出错,完全可以不这么做,是否设为null与内存释放没有任何本质的联系。
4,debug版会对内存做很多手脚,不只是填充,维护的控制数据都不一样,所以如果有对内存特别的操作,一定要以release调试。
回复
lifekill1978 2002-07-24
这种释放只是释放控制权,其内容还是存在。就像new得到的指针,然后delete后,你再观察他的值依旧存在,所以必须delete后将指针赋为0
回复
宝_爸 2002-07-23
不对啊,我记得如果用malloc或者new出的内存,
我做了如下测试
char* p =(char*) malloc(100);
分配后这块内存是cdcdcd...(分配之前是dddddd....两次debug p都是分配到了同一块内存上,所以看得到。)

memset(p, 0, 100);
内存变成了000000....

free(p);
内存又恢复成了最初的dddddddd.....
也就是说如果使用malloc或者new的话,是释放空间的。
对于sysfreestring我没有试过。

还有上面的测试都是在vc6.debug环境下测试的。

回复
宝_爸 2002-07-23
不对啊,我记得如果用malloc或者new出的内存,
我做了如下测试
char* p =(char*) malloc(100);
分配后这块内存是cdcdcd...(分配之前是dddddd....两次debug p都是分配到了同一块内存上,所以看得到。)

memset(p, 0, 100);
内存变成了000000....

free(p);
内存又恢复成了最初的dddddddd.....
也就是说如果使用malloc或者new的话,是释放空间的。
对于sysfreestring我没有试过。

还有上面的测试都是在vc6.debug环境下测试的。

回复
e2wugui 2002-07-23
malloc, free 在 release 下面是不会对操作的内存作清除等操作的。
在debug下面作了一些清除,可以用来检查内存的使用。

像变量没有初始化的错误,通常在debug下面无法暴露(因为有清除。相当于一个初始化了),但在release下面就遭了。这个是很难查的错误。我遇到过一次,查了半天,唉!

我记得 CC 是 int 3;

CD DD 是不是也与汇编有关呢?
回复
sam1111 2002-07-23
内存被释放后,它里面的内容仍保持释放前的状态,直到下次被重新分配并初始化。
free(p)后,p变成了无效的指针,系统会将p指向无效区域,ddddd...是无效区域的值,而不是p被释放前所指向的内存区域的值。
回复
Wargod2002 2002-07-22
我觉得值还在不代表空间未被释放
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……