leak memory???

icuc88 2002-07-08 11:17:15
#include <iostream>
#include "student.h"
#include "name.h"
using namespace std;
int main(int argc, char* argv[])
{
const int MAX = 5;
base_student stu[MAX];
float scores[MAX] = {60, 50, 78.5, 89, 74};
base_name *name[MAX];
name[0] = new base_name("a", "b");
name[1] = new base_name("c", "d");
name[2] = new base_name("e", "f");
name[3] = new base_name("g", "h");
name[4] = new base_name("i", "j");
for (int i=1; i<=5; i++)
{
stu[i-1].set_num(i);
stu[i-1].set_name(&name[i-1]);
stu[i-1].set_score(scores[i-1]);
cout << stu[i-1];
}

delete [] name; ////-------->>>是否存在leak memory???
system("PAUSE");
return 0;
}
...全文
50 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
prototype 2002-07-08
  • 打赏
  • 举报
回复
you should change:

delete [] name;

to:

for (int i = 0; i < max; ++i) delete name[i];
liao2001 2002-07-08
  • 打赏
  • 举报
回复
不存在?
不懂C++,但name的空间能delete? name中的指针指向的空间却没delete...
liao2001 2002-07-08
  • 打赏
  • 举报
回复
不存在?
不懂C++,但name的空间能delete? name中的指针指向的空间却没delete...
icuc88 2002-07-08
  • 打赏
  • 举报
回复
加分结贴。
kisscpp 2002-07-08
  • 打赏
  • 举报
回复
hehe,写错了!!!

base_name ** name=new base_name*[MAX];
name[0]=new base_name("a", "b");
...
name[4]=new base_name("i", "j");

delete name[0];
...
delete name[4];

delete [] name;

...

见笑!!
fminhua 2002-07-08
  • 打赏
  • 举报
回复
name[]的内容销毁了。但指针还存在,是指向任意空间的野指针,指针不为NULL。

char *p = "hello!";
delete p;
if (p != NULL)
{
strcpy(p,"world");
}
内存出错。因为p是野指针;它指向的空间未知
kisscpp 2002-07-08
  • 打赏
  • 举报
回复
prototype(原型) 说的没错!

如果是:
base_name ** name=new base_name*[MAX];
base_name[0]=new base_name("a", "b");
...
base_name[4]=new base_name("i", "j");

则要:
delete base_name[0];
...
delete base_name[4];

delete [] base_name;
才可!
还有,可以借助一些工具去找,如:BooundsChecker非常实用。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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