大家看看我释放内存的方法对不对???

wangsiyuanoo 2008-12-26 03:32:26
程序一共就NEW了两个地方
不知道是释放的方法错了还是什么
依然有内存泄露!
//第一个NEW
ExeInfo * pExeInfo = new ExeInfo; //!
pExeInfo->strName = SExeInfoIni.ReadText("info", "Name");
m_ExeInfoList.push_back(pExeInfo);

//释放
if (m_ExeInfoList.size() > 0)
{
for (vector<ExeInfo*>::iterator iter = m_ExeInfoList.begin(); iter != m_ExeInfoList.end(); iter++)
{
delete * iter;
}
}
m_ExeInfoList.clear();

//第二个NEW
g_strGamePathRes = new char[i+1]; //!

//释放
delete []g_strGamePathRes;


Detected memory leaks!
Dumping objects ->
{178} normal block at 0x005091C8, 1 bytes long.
Data: < > 00
{177} normal block at 0x00509188, 1 bytes long.
Data: < > 00
{174} normal block at 0x00508EE8, 1 bytes long.
Data: < > 00
{169} normal block at 0x00509018, 1 bytes long.
Data: < > 00
{168} normal block at 0x00508FD8, 1 bytes long.
Data: < > 00
{165} normal block at 0x00508EA8, 1 bytes long.
Data: < > 00
Object dump complete.
...全文
243 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsiyuanoo 2008-12-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jackzhhuang 的回复:]
pExeInfo 内存释放了

但可能是ExeInfo这个类有内存泄露,仔细检查成员数据有没有可能会造成内存泄露。

ps:
if (m_ExeInfoList.size() > 0)
多余
[/Quote]

ExeInfo是一个我自定义的结构的,没有析构,成员变量也就是string、int类型的
yytlan 2008-12-27
  • 打赏
  • 举报
回复
我觉得楼主发贴的时候,应该发全了,要不然就不有这样多的观点了.
waizqfor 2008-12-27
  • 打赏
  • 举报
回复
UP下吧
yueyucanyang 2008-12-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wangsiyuanoo 的回复:]
引用 2 楼 lbh2001 的回复:
pExeInfo->strName = SExeInfoIni.ReadText("info", "Name");

pExeInfo中strName是指针吧,所指的内存释放了吗

strName不是指针啊,他只是我定义的一个结构里的成员变量。
pExeInfo->strName = SExeInfoIni.ReadText("info", "Name"); //意思是从配置文件中读一个字符串然后赋给strName
[/Quote]

正常情况下,这个应该是没有问题的,string一般没有内存泄露的问题!有可能是程序别的地方,或者是上释放了一个指针。
shyli 2008-12-27
  • 打赏
  • 举报
回复
是不是SExeInfoIni执行ReadText时有new char[]但没有delete[]?
jackzhhuang 2008-12-27
  • 打赏
  • 举报
回复
pExeInfo 内存释放了

但可能是ExeInfo这个类有内存泄露,仔细检查成员数据有没有可能会造成内存泄露。

ps:
if (m_ExeInfoList.size() > 0)
多余
ypb362148418 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lockhall 的回复:]
pExeInfo 这个指针没释放啊

delete pExeInfo;
[/Quote]

//支持,正确
gongnai 2008-12-26
  • 打赏
  • 举报
回复
楼主, 能否是你的 class ExeInfo 里面的析构函数

写的时候有内存泄露呢?

你的在vector 里面 delete * itor 的时候 应该是

调用你的 析构函数吧? 如果你的析构函数写的不好的好.

就容易内存泄露了. 是不是?

望大家批评指正!
wangsiyuanoo 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lbh2001 的回复:]
从配置文件中读一个字符串然后赋给strName--->字符串怎么赋给strName,字符串是要拷贝才能赋给的,除非是指针
[/Quote]
额.....比如配置文件里是Name="adadadada"
我用ReadText去读他,读出来后再赋给string strName
其实就是
string name = SExeInfoIni.ReadText("info", "Name"); //不过ReadText返回的是char *,但可以直接用string去赋值的。不知道这里是不是你说的问题所在!
string strName = name;
Allen_zhang 2008-12-26
  • 打赏
  • 举报
回复
只有一个字节的泄漏,应该不是这里的问题
看看vector这个会不会有问题

或者用BoundsChecker查一下看看
lbh2001 2008-12-26
  • 打赏
  • 举报
回复
从配置文件中读一个字符串然后赋给strName--->字符串怎么赋给strName,字符串是要拷贝才能赋给的,除非是指针
wangsiyuanoo 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lockhall 的回复:]
pExeInfo 这个指针没释放啊

delete pExeInfo;
[/Quote]

难道
for (vector<ExeInfo*>::iterator iter = m_ExeInfoList.begin(); iter != m_ExeInfoList.end(); iter++)
{
delete * iter;
}
这个不是释放pExeInfo 的方法么?
wangsiyuanoo 2008-12-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lbh2001 的回复:]
pExeInfo->strName = SExeInfoIni.ReadText("info", "Name");

pExeInfo中strName是指针吧,所指的内存释放了吗
[/Quote]
strName不是指针啊,他只是我定义的一个结构里的成员变量。
pExeInfo->strName = SExeInfoIni.ReadText("info", "Name"); //意思是从配置文件中读一个字符串然后赋给strName
syd_programming 2008-12-26
  • 打赏
  • 举报
回复
同意2楼的,是strName指向内存没释放吧?
hhyttppd 2008-12-26
  • 打赏
  • 举报
回复
只是一个byte,应该不会是这两个地方,楼主再查下其它地方吧。
deerwin1986 2008-12-26
  • 打赏
  • 举报
回复
一个NEW对一个DELETE
循环里的NEW对循环里的DELETE
NEW数组对DELETE数组
lbh2001 2008-12-26
  • 打赏
  • 举报
回复
pExeInfo->strName = SExeInfoIni.ReadText("info", "Name");

pExeInfo中strName是指针吧,所指的内存释放了吗
lockhall 2008-12-26
  • 打赏
  • 举报
回复
pExeInfo 这个指针没释放啊

delete pExeInfo;

65,211

社区成员

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

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