C++ 望指点一下

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:34:18
有两个函数 mapin用来保存EntityObject类对象的数据成员id值和该对象指针,mapout是通过指定id从数组中找到对象指针并返回

void mapin(EntityObject*& m){//将某实体添加到map中 返回其在eomap数组中的序列
eomap[mapip].id =m->getid();
eomap[mapip].p =m;
mapip++;
}

EntityObject* mapout(unsigned long d){//通过id找到实体 返回实体地址指针
for(int i=0;i<=mapip;i++){
if(eomap[i].id==d){
cout<<"find id="<<eomap[i].id<<endl;
return eomap[i].p;
}
}
}

但是运行中 总是mapin传进去的好好的,mapout返回的指针值是随机值...无奈...

这函数不完全,如1楼所述,我再加几点:

首先用你返回的指针去->getid(); 看id是否匹配;如果匹配,那么你的程序没错,否则设断点或逐句执行,看到底哪里出的错(不要嫌烦,有时候我调程序上千组数据一个循环一个循环按下来,为了找问题,没办法)。1楼在if后加语句的话,那岂不是找到之前每一次循环都要刷出条信息来。建议在
cout<<"find id="<<eomap[i].id<<endl;
上设断点,若执行不到这个断点,那么就是没找到的意思,那就是你的存储出了问题。

其次,指针指向的内存地址在每次重新分配的时候是不一样的,若你是退出然后再运行,不能保证指向同一个内存地址。

一点浅见,抛砖引玉!

for(int i=0;i<=mapip;i++)
这句改成for(int i=0;i<mapip;i++)

另外,你在 if 的外面要加上一句 return ,不然的话,如果你要查找的 id 不在 map 里面,mapout函数就没有返回值。但调用函数的时候,系统会自动在堆栈里的相应位置读取返回值,读到的就会使一个随机值了。

你也可以在 if 外面加一句输出的语句,这样你就知道到底是怎么回事了。

大哥 写清楚点行么 挺乱的