把一个对象放到结构里面出现的问题[2004年4月26日 9:27]

正在做一个数据转发的东西,本来公司只是要求用BCB做一个出来。BCB的做了出来,感觉挺好玩,于是又用VC做了一遍,当然,BCBVC是想起来当然是大部分不一样的。现在又想扩充一下,用VC做个服务程序出来,可以动态申请开端口(原来只是一个服务端口)。具体的有空再说吧!

下面把CArray放到结构里,

typedef struct tagMainService

{

       TCHAR          DisabledAddr[30];

       CArray arrSubService;

}MAINSERVICE, *LPMAINSERVICE;

然后

MAINSERVICE m;

SUBSERVICE s;

m.arrSubService.Add(s);

这样用,应该没有什么问题吧!的确没有问题。

可是今天,我是用的时候却跳出莫名其妙Debug错误。而且出在了我第一次调用arrSubService的地方。停止的地方在

1.  Add

2ASSERT_VALID(this);

2.  ASSERT(nIndex >= 0);//停在这里

3.  AfxAssertValidObject

先看到nIndex>=0,这个明显是对的呀!怎么出错会在这里?想了半天不能明白。废话少说,还是把真想马上揭露吧。我在程序中多次用到了memset函数。结构体不用memset怎么行呢!相信高手应该看出什么端倪来了!memsetCArray对象的初始化也清除掉了,呵呵,虽然是对象,也会出现和new出来的一样找不到this。上面,VC真正断的应该是ASSERT(this)

原因找到了,要解决它,也简单把

CArray arrSubService;

换成CArray *pArrSubService;

memset以前记得把pArrSubService 清除掉。如果要保存CArray里面的数据,可以用一个临时的CArray指针接管,然后memset了以后,再指回去,注意要先把pArrayOld=NULL,要不然Array的结构也没了。使用以前先new一个。这样,新的问题也出来了。

m_MainService.arrSubService[i]. DisabledAddr

原来上面这句是直接可以用的,现在当[i]后面那个点出来的时候,可以见到VC提示CArray的函数,可是编译通不过。想想,应该是arrSubService转换成指针后出现的问题。一般我们用

char *p = new char[100];

p[10]=’a’;

这样是不会有问题,CArray和这个惯例逆了,修改成

(*m_MainService.arrSubService)[i]. DisabledAddr

呵呵,这样就行了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值