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

CString 的问题大虾指教

qq570614012 2010-07-07 10:03:57
CString a,b;
a="123456789";
b=a;
b.ReleaseBuffer(5);


为什么b变成12345的同时 a也会变成12345 又不是引用.
...全文
79 点赞 收藏 15
写回复
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
谱靠一哥 2010-07-07
[Quote=引用 13 楼 finder_zhang 的回复:]
跟着ReleaseBuffer()的代码进去DEBUG了一下,VS2008的有BUG.
在VC6里面,ReleaseBuffer的时候,会先判断一下使用计数,像执行过b=a这些操作,同时指向同一地方的.
使用计数会是2,VC6里,会把使用计数减1,然后自身再建新的位置来改新的长度.

但是在VS2008里面,明明是使用计数是2,但却没有把使用计数减1,而去改buf里的内容.
[/Quote]
那release时是不是也是这样呢?
回复
kemee 2010-07-07
[Quote=引用 13 楼 finder_zhang 的回复:]

跟着ReleaseBuffer()的代码进去DEBUG了一下,VS2008的有BUG.
在VC6里面,ReleaseBuffer的时候,会先判断一下使用计数,像执行过b=a这些操作,同时指向同一地方的.
使用计数会是2,VC6里,会把使用计数减1,然后自身再建新的位置来改新的长度.

但是在VS2008里面,明明是使用计数是2,但却没有把使用计数减1,而去改buf里的内容.
[/Quote]

牛X,越来越发现我的debug能力及其垃圾,堆栈汇编统统看不懂,出错愣是用MessageBox之类的输出信息定位到出错代码,相当的累啊
回复
finder_zhang 2010-07-07
跟着ReleaseBuffer()的代码进去DEBUG了一下,VS2008的有BUG.
在VC6里面,ReleaseBuffer的时候,会先判断一下使用计数,像执行过b=a这些操作,同时指向同一地方的.
使用计数会是2,VC6里,会把使用计数减1,然后自身再建新的位置来改新的长度.

但是在VS2008里面,明明是使用计数是2,但却没有把使用计数减1,而去改buf里的内容.
回复
dcw0402 2010-07-07
果然 GetBuffer前 还指向同一地址,GetBuffer后就不是了
回复
b=a; 说明他们使用同一内存地址吧...
回复
踏实每一步 2010-07-07
还有这种时,那边就是VS2008的bug
回复
finder_zhang 2010-07-07
果然是这样,看来在VS2008里,不能乱用ReleaseBuffer()才行了.
VC6就没有问题.
主要是 b = a 的时候,他们大家都指向同一个堆中的字符地址了.
回复
kemee 2010-07-07
我只知道GetBuffer()用来申请新的空间,并返回指针,不成对使用造成无法预料的结果的原因请楼下高手回答。。。。
回复
qq570614012 2010-07-07
[Quote=引用 6 楼 kemee 的回复:]
CString a,b;
a="123456789";
b=a;
b.GetBuffer(5);
b.ReleaseBuffer(5);

这样a就不会截断了
[/Quote]

为什么不成对的时候会被截断呢
回复
kemee 2010-07-07
CString a,b;
a="123456789";
b=a;
b.GetBuffer(5);
b.ReleaseBuffer(5);

这样a就不会截断了
回复
kemee 2010-07-07
b.ReleaseBuffer(5);之前要+ b.GetBuffer(5);

这2个貌似成对使用的,哥们
回复
qq570614012 2010-07-07
帮我看看 ,加我QQ570614012,
回复
qq570614012 2010-07-07
我用的VS2008 你们用的什么
回复
惜玉 2010-07-07
测试发现,a 没有变成12345. 。。
回复
Eleven 2010-07-07
你确定?
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

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

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