读书人

一个函数中new的内存储器在另外一个

发布时间: 2013-02-24 17:58:56 作者: rapoo

一个函数中new的内存,在另外一个函数中为什么不能使用?
BOOL CCollectors::addCollector(CDBApp * ptDBApp,const CString strCollID, CCollector * ptCollector )
{
CString strSql;
strSql.Format("select * from TDC004 where COLL_ID = '%s'",strCollID);

CRecordSet * rs = ptDBApp->Select(strSql);
if (rs &&(rs->FetchNext()))
{
CCollector * pCollector = new CCollector();
pCollector->setCollID(rs->GetStringValue("COLL_ID").Trim());

/*执行到这儿是对的*/ptCollector = pCollector;
delete rs;
return TRUE;
}
}

主函数中是这样调用的:

CCollector * ptCollector =(CCollector *) HTCollectors.SearchInHash(strCollID);
if (ptCollector == NULL)
{
if (Collectors.addCollector(ptDBApp,strCollID, ptCollector))
{
/*执行到这一句出错*/HTCollectors.InsertHash(ptCollector,ptCollector->getCollID());
}
}

其中在addCollector函数中可以看到ptCollector指针指向了new的那段内存,是有值得,但是执行到
HTCollectors.InsertHash(ptCollector,ptCollector->getCollID());
这一句时,ptCollector指针的指向的内容为空了,请问是怎么回事? 多谢了
[解决办法]
还是 传值,传址 问题
改成:
BOOL CCollectors::addCollector(CDBApp * ptDBApp,const CString strCollID, CCollector ** ptCollector )


[解决办法]

引用:
还是 传值,传址 问题
改成:
BOOL CCollectors::addCollector(CDBApp * ptDBApp,const CString strCollID, CCollector ** ptCollector )

有道理,只是个简单的按值传递的问题,但遇到了指针,干扰了视线。
主函数的ptCollector值被按值传递给addCollector函数的形参ptCollector。
[解决办法]
如果没看错你应该传递指针的指针或者指针的引用,你修改的只是形参的值,实参没有发生任何变化。可以在网上仔细看看参数传递相关的一些文章

读书人网 >C++

热点推荐