社区
C++ Builder
帖子详情
c++队列元素含指针怎么释放
萝呆子
2018-02-01 05:08:19
我定义了一个结构体
struct IMG{
char *img;
int imgSize;
}
然后声明了一个队列:
queue<IMG> qimg;
声明对象并进队:
IMG _img;
_img.img = new char[100];
_img.imgSize = 100;
qimg.push(_img);
之后用完pop时,如何释放掉这块new出来的内存。
注:直接pop不行,我试过了。
...全文
1063
8
打赏
收藏
c++队列元素含指针怎么释放
我定义了一个结构体 struct IMG{ char *img; int imgSize; } 然后声明了一个队列: queue qimg; 声明对象并进队: IMG _img; _img.img = new char[100]; _img.imgSize = 100; qimg.push(_img); 之后用完pop时,如何释放掉这块new出来的内存。 注:直接pop不行,我试过了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
萝呆子
2018-02-02
打赏
举报
回复
引用 5 楼 u010165006 的回复:
delete[]
疏忽了。谢谢! 原因已经找到,在return 0后,析构还会被执行一次,所以会报错。
ooolinux
2018-02-02
打赏
举报
回复
delete[]
萝呆子
2018-02-02
打赏
举报
回复
引用 2 楼 u010165006 的回复:
或者IMG改成类,在构造函数中申请内存,析构函数中释放内存。
那个示例程序写错了,,,下面才是 #include <iostream> #include <queue> #include <Windows.h> using namespace std; class IMG { public: IMG(); ~IMG(); char *str; int size; }; IMG::IMG(){} IMG::~IMG() { delete this->str; this->size = 0; printf("元素被析构!\n"); } int main() { char *str = new char[16]; strcpy(str, "HelloWorld!\n"); queue<IMG> qImg; IMG _img; _img.str = str; _img.size = strlen(str); qImg.push(_img); qImg.pop(); system("pause"); return 0; }
萝呆子
2018-02-02
打赏
举报
回复
引用 2 楼 u010165006 的回复:
或者IMG改成类,在构造函数中申请内存,析构函数中释放内存。
还是不对,这是测试代码,如果不注释delete,执行会崩溃。 #include <iostream> #include <queue> #include <Windows.h> using namespace std; class IMG { public: IMG(); ~IMG(); char *str; int size; }; IMG::IMG(){} IMG::~IMG() { //delete this->str; this->size = 0; printf("元素被析构!\n"); } int main() { char *str = "HelloWorld!\n"; queue<IMG> qImg; IMG _img; _img.str = str; _img.size = strlen(str); qImg.push(_img); qImg.pop(); system("pause"); return 0; }
ooolinux
2018-02-02
打赏
举报
回复
qImg.push(_img); 因为你push的是对象,而不是对象的指针,应该会发生拷贝构造,需要在拷贝构造函数里深拷贝缓冲区成员,不然的话原对象和队列里的对象两个对象的成员共享同一个缓冲区,两个对象的析构造成缓冲区的二次delete出错。
ooolinux
2018-02-02
打赏
举报
回复
IMG _img; 是main函数的局部变量,作用域就是在main函数,main函数结束的时候(离开作用域)会自动析构。
ooolinux
2018-02-01
打赏
举报
回复
或者IMG改成类,在构造函数中申请内存,析构函数中释放内存。
ooolinux
2018-02-01
打赏
举报
回复
先取队列元素,delete[] img 成员。
c++
队列
指针
结构体
指针
RevData中如果放的是对象数据,不是char* int,可以用如下方式: RevData*recvD =newRevData; recvD.size = i; strcpy(recvD.data, "hello"); queue1.push(recvD);// recvp); 如果是char*,就得用malloc: struct RevData{ int siz...
C++
队列
(2)
指针
实现
本篇介绍通过链表和
指针
实现
队列
。 一、逻辑结构: 我们使用如下图所示的带尾
指针
的循环链表结构: 使用该结构是因为我们需要对头和尾进行操作,如果是带头
指针
的话尾部不好找到,而如果是带尾
指针
的循环链表,尾的next就是头,这样对两端的操作十分方便。 二、概述: 以下是要实现的功能: class Queue { private: class Node//存储数据的节点,由数据和指向下一个节点的
指针
组成 { public: int data; Node* next;
C++
栈和
队列
、
指针
与引用
第一、栈(stack)(后进先出) 使用栈,要先包括头文件#include<stack> 定义栈,一下形式实现 stack<Type>s;其中Type为数据类型(如int ,char,float等) 栈的主要操作: s.push(item);//将item压入栈顶 s.pop();//删除栈顶的
元素
,但是不会返回 s.top();//返回栈顶的
元素
,但是不会删除 s.size();//返回栈中
元素
的个数 s.empty();//检查栈是否为空,如果为空返回ture,否则返回
c++
队列
及自定义结构体/类的
指针
队列
问题
c++
队列
存放的是
元素
的拷贝而不是
元素
本身,所以存在一个问题:当我们需要使用
队列
进行搜索,搜索的过程中又需要更改
元素
本身(如修改结构体内部某个
指针
等)应该怎么操作? 尝试使用
指针
队列
:发现对于基本类型int等可以实现(代码1),但自定义结构体、类无法实现。
队列
中存放的
元素
值都会变成最后一个入队的
元素
值。请问这是为啥??(灬ꈍ ꈍ灬) 代码1:int的
指针
队列
#include<iostream> #include<queue> using namespace std; queue&
C++
释放
指针
时的操作
C++
标准规定:delete空
指针
是合法的,没有副作用。 所以我们在Delete
指针
后赋值为NULL或0是个好习惯。 对一个非空
指针
delete后,若没有赋NULL,若再次delete的话,有可能出现问题。如下代码:
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章