MFC中CString赋值出错

typedefystructABC{CStringstr;structABC*next;}ABC;CStrings;ABC*p=(ABC*)malloc(sizeof(A... typedefy struct ABC
{
CString str;
struct ABC *next;
} ABC;
CString s;
ABC *p=(ABC*)malloc(sizeof(ABC));
p->str=s;//出错Unhandled exception.....
单步跟踪的话会停在 stringSrc.GetData()->nRefs < 0 这里
这是说不能这样赋值吗?
展开
 我来答
a36254094
2012-10-04 · TA获得超过208个赞
知道小有建树答主
回答量:196
采纳率:0%
帮助的人:176万
展开全部
不是不能赋值,这讲起来内容就多了,涉及到C++底层的一些知识。
你现在这种用法是把struct ABC当做一种数据结构来用,当然针对struck结构
ABC *p=(ABC*)malloc(sizeof(ABC));
p->str=s;
这种用法是无可厚非的,毛病出在你在这个struck里定义了一个类对象CString,
在C++有关构造函数的知识里,一个类A里如果包含有B类的对象,那么在这个A类定义对象时,编译器会在A类的构造函数里调用B的构造函数。
好了,矛盾出来了,struct ABC你是当结构体用的,没有所谓的构造函数,那么结构体里的str就没被构造,所以就会出现很多问题,具体出在哪我也不知道,那得去看CString源码。
由此,有二种改法,一个是把malloc改成new,一个是把CString改成内置类型,比如说char
intehel
2012-10-04 · TA获得超过1293个赞
知道大有可为答主
回答量:1601
采纳率:100%
帮助的人:1766万
展开全部
CString *t = new(p)CString();
把这一行加到ABC *p=(ABC*)malloc(sizeof(ABC));之后

原因是你的CString str没有构造。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zcy990718
2012-10-04 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1.2万
采纳率:66%
帮助的人:1522万
展开全部
CString s;

s = "something";
ABC *p = new ABC;
p->str=s;//出错Unhandled exception.....
追问
s="something";//没错误
p->str="something";//出错
p->str=s;//出错
有没有什么解决方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友96aa8d3
2012-10-04 · TA获得超过433个赞
知道小有建树答主
回答量:2306
采纳率:75%
帮助的人:948万
展开全部
不是有CSTRINGLIST
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式