是否释放了内存空间?

fifaxjb 2004-10-27 09:13:43
struct pData
{
int a;
int b;
unsigned char* c;
}PDATA ;
std::list<pData> pdatalist;

main()
{
...
PDATA.c = new unsigned char[300];
pdatalist.push_back(PDATA);
...
std::list<pData>::iterator begin = pdatalist.begin();
pdatalist.erase(begin );//这样是否能够把前面new所申请的内存一同都释放掉
}
大家都来帮我参谋参谋!
...全文
123 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dong 2004-10-27
  • 打赏
  • 举报
回复
PDATA.c = new unsigned char[300];在pdatalist.erase(begin );后分配的空间还是没有被释放掉,erase()只是把存在PDATA的地址删除,但删除的是本身的地址副本,不过假如你先删除PDATA.c指向的内容的话,那么在
std::list<pData>::iterator begin = pdatalist.begin();
其中begin->c是无效的。读出是乱码
Daydreamnet 2004-10-27
  • 打赏
  • 举报
回复
内存还没有释放的,
这只是删除了list里面的记录而已。
在应该delete[] begin.c
carylin 2004-10-27
  • 打赏
  • 举报
回复
内存没有释放。
应该使用delete[]
kahn 2004-10-27
  • 打赏
  • 举报
回复
应该不是吧,清掉了迭代子就释放了空间了?

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧