CSDN博客

img hahu

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

发表于2004/7/11 3:08:00  1017人阅读

分类: VC++ 编程综合

正在做一个数据转发的东西,本来公司只是要求用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

相关博文

我的热门文章

img
取 消
img