CString a,b;
a="123456789";
b=a;
b.ReleaseBuffer(5);
为什么b变成12345的同时 a也会变成12345 又不是引用. 

解决方案 »

  1.   

    b.ReleaseBuffer(5);之前要+  b.GetBuffer(5);这2个貌似成对使用的,哥们
      

  2.   

    CString a,b;
    a="123456789";
    b=a;
    b.GetBuffer(5);
    b.ReleaseBuffer(5);这样a就不会截断了
      

  3.   

    我只知道GetBuffer()用来申请新的空间,并返回指针,不成对使用造成无法预料的结果的原因请楼下高手回答。
      

  4.   

    果然是这样,看来在VS2008里,不能乱用ReleaseBuffer()才行了.
    VC6就没有问题.
    主要是 b = a 的时候,他们大家都指向同一个堆中的字符地址了.
      

  5.   

    还有这种时,那边就是VS2008的bug
      

  6.   

    果然 GetBuffer前 还指向同一地址,GetBuffer后就不是了
      

  7.   

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

  8.   


    牛X,越来越发现我的debug能力及其垃圾,堆栈汇编统统看不懂,出错愣是用MessageBox之类的输出信息定位到出错代码,相当的累啊
      

  9.   

    那release时是不是也是这样呢?