当前位置: 代码迷 >> VC >> c++中类的成员空间分配有关问题!
  详细解决方案

c++中类的成员空间分配有关问题!

热度:256   发布时间:2016-05-05 00:10:05.0
c++中类的成员空间分配问题!!!急啊


先说说我的问题:
我定义了一个对话框类:CDlgpoint;
里面的一个成员是我自定义的结构体:
先写出我的结构体,里面需要存一个字符串,我是在结构体构造函数中申请内存空间;
如下:
#define LEN 100

STRUCT struct_my
{
char *name;
//构造函数
struct_my
{
name = new char[LEN ];
}
//析构函数就不写出来了;


}


我的子对话框类CDlgpoint如下,里面定义了一个结构体struct_my的成员:

CDlgpoint
{
public:
struct_my  m_struct_my;
}
在CDlgpoint的构造函数中,给m_struct_my的name赋值,如下:

CDlgpoint(Cstring str)
{
m_struct_my.name = str;
}



在我的主对话框中:需要生成两个CDlgpoint的子对话框:

我先定义:
CDlgpoint *dlg1;
CDlgpoint *dlg2;


然后
dlg1 = new  CDlgpoint("123");
dlg1.creat();
dlg1.show();
dlg2 = new  CDlgpoint("456");
dlg2.creat();
dlg2.show();


本想两个子对话框的name会不同:可是问题出现了:
用断点进去看。
dlg1.name = "456";
dlg2.name = "456";
测试了一下:
如果再增加一个"789"子对话框,
dlg1 = new  CDlgpoint("123");
dlg2 = new  CDlgpoint("456");
dlg3 = new  CDlgpoint("789");
 则:
dlg1.name = "789";
dlg2.name = "789";
dlg3.name = "789";

也就是说最后是最后一次的值;我本以为类在生成实例时,会相对有独立的数据空间,如果定义一个普通的变量,就

不会有问题,偏偏是这个结构体中动态分配内存变量就有问题;我看了下,dlg1、dlg2、dlg3 name的内存地址都是一

样的,我觉得应该会不一样啊。请大家给我解释下吧!!

------解决方案--------------------
你自己对问题都一点不负责,调试你贴哪代码,我还得猜你是怎么写的,把错误和没写全的地方给补上,你还根本没理解指针,按你代码执行,
这个构造函数里的new没有没执行,只是name指向了函数作用域内开辟的空间
dlg1 = new  CDlgpoint("123");
dlg2 = new  CDlgpoint("456");
dlg3 = new  CDlgpoint("789");
"123"的内存空间在 dlg1在new的时候开辟,new完以后"123"内存空间被释放,
"456"依然是在"123"的位置被开辟空间,后面也是一样,
所以最后执行完以后dlg1,dgl2,dlg3的name都是指向同一个内存地址,值当然是最后的那个值,
也许我说的不准,因为你哪代码不全,我也没法还原成你写的那个样子,我没法把原因分析准确,我怎么知道具体你是怎么写的。
  相关解决方案