内存释放问题 如果CROOM_DATA 结构里面没有指针指向内存,不用自己释放,函数退出出栈即完成释放结构里面有指针指向内存,而且该内存是由GetOneRoomData 动态分配的调用delete或或者free释放,到底用哪个,取决于GetOneRoomData 是怎么分配的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CROOM_DATA *pNewData = new CROOM_DATA ; // 为新的实例赋值。 *pRoomData = *pNewData ; delete pRoomData; QQ开发群:73204313 讨论c/c++,算法,开源,linux/window等 就是调用处语法怎么样的,我delete &tRoomData 报错了 void Func::RefreshList (){ CROOM_DATA *tRoomData = NULL; GetOneRoomData (int nRoomNo, &tRoomData); if(tRoomData != NULL) delete tRoomData;}void GetOneRoomData (int nRoomNo, CROOM_DATA **pRoomData){ CROOM_DATA *pNewData = new CROOM_DATA ; // 为新的实例赋值。 *pRoomData = pNewData ;} void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData){CROOM_DATA *pNewData = new CROOM_DATA ;// 为新的实例赋值。*pRoomData = *pNewData ;delete pNewData ;} if(tRoomData != NULL) delete tRoomData; 报错的,我定义的tRoomData 是类对象实例,不是普通指针 void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData) { CROOM_DATA *pNewData = new CROOM_DATA ; // 为新的实例赋值。 *pRoomData = *pNewData ; } 那么我在调用处如何释放这个内存呢? 谢谢 void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData) { CROOM_DATA *pNewData = new CROOM_DATA ; // 为新的实例赋值。 *pRoomData = *pNewData ; delete pNewData ; } 这样是不是我调用处还没用, 你就把那块内存删了呢? 调用完了用delete pRoomData;释放但LZ你这个函数不行,需要用引用:void GetOneRoomData (int nRoomNo, CROOM_DATA *&pRoomData) 要不然会内存泄露 GetOneRoomData函数中的指针pNewData动态分配然后赋值,再拷贝到pRoomData所指向的RefreshList函数中静态分配的类实例中(这里需要重载operator=,不知楼主有没有做),pNewData的任务就完成了,也就可以释放了void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData) { CROOM_DATA *pNewData = new CROOM_DATA ; // 为新的实例赋值。 *pRoomData = *pNewData ; delete pNewData;} 实际上函数RefreshList已经做过静态分配了,函数GetOneRoomData中不需要再做新的分配 不好意思,我看错了,*pRoomData = *pNewData是类对象拷贝赋值,不需要引用。11L所说正确 关于批量复制文件的问题 关于updatedata的问题 散分!全局的“::”感觉用处太大了,请大家畅所欲言! 怎样输出中文 哪位大侠有加壳解壳的源代码?我想要一份学习一下 关于开发数据库程序的讨论(欢迎发言) 清除指定区域的图形应该怎么做呀,谢谢 大家帮忙!怎么给CEdit的弹出菜单做成自定义的 DataGrid控件问题 请问学习C++可以直接学Visual C++吗?我以前是学C的. 最短小精悍的搜索文件算法 0xC0000005:Access Violation
// 为新的实例赋值。 *pRoomData = *pNewData ;
delete pRoomData;
讨论c/c++,算法,开源,linux/window等
就是调用处语法怎么样的,我delete &tRoomData 报错了
{
CROOM_DATA *tRoomData = NULL; GetOneRoomData (int nRoomNo, &tRoomData);
if(tRoomData != NULL)
delete tRoomData;}void GetOneRoomData (int nRoomNo, CROOM_DATA **pRoomData)
{
CROOM_DATA *pNewData = new CROOM_DATA ;
// 为新的实例赋值。 *pRoomData = pNewData ;
}
{
CROOM_DATA *pNewData = new CROOM_DATA ;
// 为新的实例赋值。*pRoomData = *pNewData ;
delete pNewData ;
}
if(tRoomData != NULL)
delete tRoomData; 报错的,我定义的tRoomData 是类对象实例,不是普通指针
{
CROOM_DATA *pNewData = new CROOM_DATA ;
// 为新的实例赋值。 *pRoomData = *pNewData ;
} 那么我在调用处如何释放这个内存呢? 谢谢
void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData)
{
CROOM_DATA *pNewData = new CROOM_DATA ;
// 为新的实例赋值。 *pRoomData = *pNewData ;
delete pNewData ;
} 这样是不是我调用处还没用, 你就把那块内存删了呢?
但LZ你这个函数不行,需要用引用:
void GetOneRoomData (int nRoomNo, CROOM_DATA *&pRoomData)
要不然会内存泄露
GetOneRoomData函数中的指针pNewData动态分配然后赋值,再拷贝到pRoomData所指向的RefreshList函数中静态分配的类实例中(这里需要重载operator=,不知楼主有没有做),pNewData的任务就完成了,也就可以释放了void GetOneRoomData (int nRoomNo, CROOM_DATA *pRoomData)
{
CROOM_DATA *pNewData = new CROOM_DATA ;
// 为新的实例赋值。 *pRoomData = *pNewData ;
delete pNewData;
}
实际上函数RefreshList已经做过静态分配了,函数GetOneRoomData中不需要再做新的分配