内存会不会泄露,程序有没有问题?

刀刀亮 2011-11-22 08:42:35

struct NOde
{
Char *test;
Char *test1
public:
void Init()
{
test=null;
}
};

int main()
{
char*p;
list<Node> MYList;
for(int i=0;i<10;i++)
{
p=new char[3];
MYlist.at(i).test=p;
}
//TODO在这里释放内存
}

问题是:我在循环内部,存储在链表内部的是什么?地址?指针?能不能把内存的分配存储的是什么或者说是构成讲一下?
谢谢各位大牛。
...全文
213 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
刀刀亮 2011-11-23
  • 打赏
  • 举报
回复
感谢各位的赐教……
追求执着 2011-11-22
  • 打赏
  • 举报
回复
看回复,其实也可以发现很多自己的问题!!
up!
Snight 2011-11-22
  • 打赏
  • 举报
回复
list<Node> MYList 这种
内部存储的是Node对象的拷贝。

list<Node*> MYList 这种
内部存储的是Node对象的指针。
小木 2011-11-22
  • 打赏
  • 举报
回复
确实问题很多
sdadas 2011-11-22
  • 打赏
  • 举报
回复
说的不是很明白!
恨天低 2011-11-22
  • 打赏
  • 举报
回复
LZ要把基础学好先
zzcmx2008 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
额 1.list似乎没有at这个成员函数。2.作为容器的元素,那么定义行为良好的复制构造函数和赋值运算符都是有必要的。你这里list<Node>已经表明了存储的是一个Node对象。
[/Quote]

+

另外,p=new char[3];的内存,没有进行delete
BT六眼飞鱼 2011-11-22
  • 打赏
  • 举报
回复
list的用法LZ再学一下吧。。。~
BT六眼飞鱼 2011-11-22
  • 打赏
  • 举报
回复
我在循环内部,存储在链表内部的是什么?地址?指针?能不能把内存的分配存储的是什么或者说是构成讲一下?
*****************************************************************
你在List中存的是Node结构体,在List进行销毁时,会调用每个Node的析构函数:~Node(void),这里LZ用new char[3]在堆中申请了内存并将首地址赋值到了Node的test,但是并没有在~Node(void)中或是其他地方调用delete [],因此会造成内存泄露,应该为Node加上析构函数:


struct Node
{
char *test;
char *test1;
public:
void Init()
{
test=NULL;
}
~Node(void)
{
if (test)
{
delete [] test;
test = 0;
}
}
};

贪食蛇男 2011-11-22
  • 打赏
  • 举报
回复
你还是先整理个能用的代码上来吧……
错词和语法错误一大片
pengzhixi 2011-11-22
  • 打赏
  • 举报
回复
额 1.list似乎没有at这个成员函数。2.作为容器的元素,那么定义行为良好的复制构造函数和赋值运算符都是有必要的。你这里list<Node>已经表明了存储的是一个Node对象。
pathuang68 2011-11-22
  • 打赏
  • 举报
回复
都用C++了,就不要用char*啦,用string代替就OK了。
Qyee16 2011-11-22
  • 打赏
  • 举报
回复
new出来的倒是没问题,问题是,你的数据量,太大确实会出现问题 。。。。。。


链表 就是不断new 建立的,,数据量 不上G 根本没问题。。。。。。

你的处理方式也没问题,就是逻辑 处理时 ,需谨慎 ,指针呃。。。。不好操作
刀刀亮 2011-11-22
  • 打赏
  • 举报
回复
怪我没有表达清楚,我已经回复一楼的了,你再看看我想表达的意思,谢谢你回复我的帖子。

[Quote=引用 9 楼 jptaozhantaozhan 的回复:]
list<Node> MYList 这种
内部存储的是Node对象的拷贝。

list<Node*> MYList 这种
内部存储的是Node对象的指针。
[/Quote]
刀刀亮 2011-11-22
  • 打赏
  • 举报
回复
怪我没有表达清楚,我已经回复一楼的了,你再看看我想表达的意思,谢谢你回复我的帖子。
[Quote=引用 4 楼 xiakan008 的回复:]
list的用法LZ再学一下吧。。。~
[/Quote]
刀刀亮 2011-11-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
额 1.list似乎没有at这个成员函数。2.作为容器的元素,那么定义行为良好的复制构造函数和赋值运算符都是有必要的。你这里list<Node>已经表明了存储的是一个Node对象。
[/Quote]
不是这样的,我实在Qt下用的QList,我想做的其实是这么回事。

这个是我要用到的节点。
struct LaneListNode
{
QLabel *SafeStatus;
QLabel *LogInfo;
QLabel *CurrentCar;
QLabel *CarInfo;
QLabel *CarQuenue;
QLabel *DevStatus;
public:
void Init()
{
SafeStatus=NULL;
LogInfo=NULL;
CurrentCar=NULL;
CarQuenue=NULL;
DevStatus=NULL;
CurrentCar=NULL;
}
};
/*-----------------程序启动时会调用一个函数,函数的其中一部分是-------------------*/
for(int i=0;i<LaneNumber;i++)
{
Node.Init();
Node.CarInfo=new QLabel("");
Node.CarQuenue=new QLabel("");
Node.CurrentCar=new QLabel("");
Node.DevStatus=new QLabel("");
Node.LogInfo=new QLabel("");
Node.SafeStatus=new QLabel("");
LaneList.push_back(Node);
}
/*--------------------------------程序运行完成后我会执行这个析构函数------------*/
MainInterface::~MainInterface()
{
for(int i=0;i<LaneNumber;i++)
{
delete LaneList.at(i).CarInfo;
delete LaneList.at(i).CarQuenue;
delete LaneList.at(i).CurrentCar;
delete LaneList.at(i).DevStatus;
delete LaneList.at(i).LogInfo;
delete LaneList.at(i).SafeStatus;
}
delete ui;
}
/*-----------------为了方便我在类的头文件中定义了如下几个变量--------------------*/
QList<LaneListNode> LaneList;
LaneListNode Node;
int LaneNumber;

对于这几个变量的初始化我都已经对应的做好了。

/*-----------------现在的问题---------------------------------------------*/
我的程序运行没有问题,我是担心会不会有内存泄漏的嫌疑,因为我在头文件中只定义了一个变量,用来
进行在for循环中对链表的赋值。每次都是new出来的空间,然后进行把相应的指针指向new出来的地方,并把
节点放到链表中。在下一次循环时,我又指向新的New出来的内存,然后又加到链表中。这样一直都用这一个
节点变量进行赋值然后存在链表里面会不会有问题啊?有没有野指针的嫌疑啊?

65,187

社区成员

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

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