CString释放问题
VC函数中定义了CString对象,但函数结束时不能释放.调试时进入~CString()时出的错. 问题点数:100、回复次数:20Top
1 楼StarsWu(☆<--->☆)回复于 2004-08-01 15:46:03 得分 0
upTop
2 楼effenberg(爱浪漫的人)回复于 2004-08-01 17:39:31 得分 0
CString对象的对象你释放什么?不用多此一举Top
3 楼StarsWu(☆<--->☆)回复于 2004-08-01 18:00:05 得分 0
我没专门释放它呀,是函数结束自动释放的.Top
4 楼wangsaokui(无间道III(终极无间)C#MVP)回复于 2004-08-01 18:00:18 得分 0
托管代码可以自动垃圾收集,如果你要手动销毁对象,贴出~CString()Top
5 楼bluejugar(2046,那年我64.)回复于 2004-08-01 20:14:46 得分 0
可以考虑用smart pointer.Top
6 楼cnhgj(戏子) (没时间练太极)回复于 2004-08-02 02:25:41 得分 0
赋空值即可啊Top
7 楼cnhgj(戏子) (没时间练太极)回复于 2004-08-02 02:26:50 得分 0
或
CString str;
............
str.Empty();Top
8 楼gordenfl(笨笨(杨过寻找姑姑,两行泪....))回复于 2004-08-02 07:08:55 得分 0
是不是已经释放了空间,然后对空指针释放空间呢??
能不能看看你的代码?这样好对症下药
Top
9 楼bullHEcow(牛)回复于 2004-08-02 08:33:02 得分 0
upTop
10 楼StarsWu(☆<--->☆)回复于 2004-08-02 09:59:12 得分 0
Sorry,我没说清楚。
问题是这样的:
我建了个动态连接库dll文件,其中有个函数假设为GetStr(),
返回一个CString对象。而我在执行文件exe文件中有个函数假设为f(),
其中定义了一个CString对象,将其赋值为GetStr();
在函数f()结束时出错。
注:将函数f()中CString对象改为指针,然后用new,然后赋值,不会出错。
不用dll,直接用函数,也不会出错。Top
11 楼qingshan(青山)回复于 2004-08-02 10:48:43 得分 10
不用CString ,用char[]看看Top
12 楼hdt(倦怠)回复于 2004-08-02 21:37:17 得分 0
CString or CString*
if CString no to delete
else
CString* delete youobject
Top
13 楼alec626(月吻长河Blog:spaces.msn.com/filebase)回复于 2004-08-04 13:02:23 得分 0
不会吧
RebuildAll试一下Top
14 楼108041217(josso)回复于 2004-08-04 15:42:14 得分 0
給出GetStr()在dll中的聲明Top
15 楼sundy26(一缕阳光)回复于 2004-08-05 17:57:00 得分 20
在DLL中不要用CString 最好用char *或者LPSTRTop
16 楼mage1982(牛)回复于 2004-08-05 20:52:56 得分 20
那是自动释放的
也是vc.net垃圾回收功能之一Top
17 楼yys79(shart-shoot)回复于 2004-08-06 13:20:26 得分 20
说的好,应该用const char*,不要用这种对象。或者使用STL的string类操作更方便Top
18 楼StarsWu(☆<--->☆)回复于 2004-08-06 14:16:48 得分 0
问题是要用CString怎么办,
总不可能你手痛就不用手吧。Top
19 楼wxaxiao(随风飘散)回复于 2004-08-06 15:22:54 得分 0
方法是多种的,为什么 非要舍近求远呢Top
20 楼ctan(ctan)回复于 2004-08-06 19:30:05 得分 30
这是因为你的CString变量超出了作用域,
DLL的变量有专门的存储区, 要想不出现这种问题, 必须用new分配空间, 使用指针传递
Top




