求助,在线等,急!

laohubinbin 2004-03-26 08:01:45
小弟的结构体题中需要存贮一些未知长度的字符串
想把其中的某个成员设为CString型
可否

但在使用结构体值钱需要事先分配内存呀
CString型变量长度不定呀
怎么办呢?

小弟是这样做的:
#define LEN sizeof(struct dicomdata)

定义结构体
struct dicomdata
{
long where;
unsigned long group;
unsigned long element;
CString info;
unsigned long e_len;
CString data_information;
struct dicomdata* next;
};

定义 struct dicomdata *p1;
p1=(struct dicomdata*)malloc(LEN);
可是到了赋初值:
p1->info="";
p1->data_information="";
时,就出现调试异常
然后跳到CString内部函数:
void CString::AllocBeforeWrite(int nLen)
{
if (GetData()->nRefs > 1 || nLen > GetData()->nAllocLength)
{
Release();
AllocBuffer(nLen);
}
ASSERT(GetData()->nRefs <= 1);
}

各位帮小弟看看怎么回事
谢谢

小弟应该怎样改正呢?
谢谢
...全文
25 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
laohubinbin 2004-03-29
  • 打赏
  • 举报
回复
现在小弟遇到了一个问题:
我想这样实现:
我建立的是一个MDI结构
打开程序不建立空文档
想在主框架工具栏上加一个按钮,这个按钮在没有打开文档前就可以起作用,通过这个按钮控制Doc.cpp中的一个BOOL值
小弟是个新手呀
难住我了
各位大哥,帮帮忙呀
谢谢
top_hipster 2004-03-29
  • 打赏
  • 举报
回复
使用new当然是是可以了,使用malloc不可以是因为一个非法的值被付给了CString 对象,因此就会出现非法调用的问题!
laohubinbin 2004-03-29
  • 打赏
  • 举报
回复
帮帮小弟
谢谢
laohubinbin 2004-03-29
  • 打赏
  • 举报
回复
继续求助
谢谢
laohubinbin 2004-03-29
  • 打赏
  • 举报
回复

这样呀
现在小弟遇到了一个问题:
我想这样实现:
我建立的是一个MDI结构
打开程序不建立空文档
想在主框架工具栏上加一个按钮,这个按钮在没有打开文档前就可以起作用,通过这个按钮控制Doc.cpp中的一个BOOL值
小弟是个新手呀
难住我了
各位大哥,帮帮忙呀
谢谢
enoloo 2004-03-26
  • 打赏
  • 举报
回复
new会调用对象的构造函数,然后结构体的大小就确定了。如果用malloc只是分配类存,并没有构造对象,所以当引用对象的时候会出错。
李马 2004-03-26
  • 打赏
  • 举报
回复
malloc只是分配了sizeof(struct dicomdata)这么大的一段内存空间,但是并没有对结构中的类对象进行任何的初始化。

在涉及到C++对象的堆内存分配时,要使用new,因为malloc是C的东西,它对C++一无所知。

同理,在释放的时候,也要用delete或delete[],而不是free。
laohubinbin 2004-03-26
  • 打赏
  • 举报
回复
哇!
真的好用呀
谢谢李马兄呀
这是规定吗?
谢谢
李马 2004-03-26
  • 打赏
  • 举报
回复
由于结构中含有类对象,分配堆内存应该用new:
p1 = new struct dicomdata;

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧