VC高手请进~~IP设置问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 21:13:54
一开始是设置了IP控件:
CIPAddressCtrl * ip1=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_BEGIN);
ip1->SetAddress(172,16,132,0);
CIPAddressCtrl * ip2=(CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS_END);
ip2->SetAddress(172,16,132,255);
然后进行:
CIPAddressCtrl * ctrl=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_BEGIN);
BYTE a[4];

ctrl->GetAddress(a[0],a[1],a[2],a[3]);
for(i=0;i<4;i++)
m_BBeginAddress[i]=(unsigned int)a[i];
ctrl=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_END);
ctrl->GetAddress(a[0],a[1],a[2],a[3]);
for(i=0;i<4;i++)
m_BEndAddress[i]=(unsigned int)a[i];
以上程序能运行并出结果。后来想删除IP控件直接设置IP,将程序改成:

CIPAddressCtrl * ip1=new CIPAddressCtrl;
ip1->SetAddress(172,16,132,0);
BYTE a[4];
ip1->GetAddress(a[0],a[1],a[2],a[3]);
for(i=0;i<4;i++)
m_BBeginAddress[i]=(unsigned int)a[i];
delete ip1;

CIPAddressCtrl * ip2=new CIPAdd

CIPAddressCtrl * ip1=new CIPAddressCtrl;
ip1->SetAddress(172,16,132,0);

这句指定会崩溃的,ip1是你新new出来的控件,并没有创建,也不属于你当前CDialog的控件。
所以代码编译没问题,但是执行的时候对一个操作一个不存在的控件,是会崩溃的。
应该像上面的那样:
CIPAddressCtrl * ip1=(CIPAddressCtrl *)GetDlgItem(IDC_IPADDRESS_BEGIN);
使用这种方式获得的指针指向的控件才是已存在的创建好的属于当前CDialog的控件。