关于delete[]的使用

delete2009 2012-11-07 07:59:08
假设我有个结构体
typedef struct
{
int x1;
int x2
}GY;
GY占8个字节。
GY * gy = null;
gy = new char[16];
表示gy申请的空间是2个GY的大小。释放时可以用delete[] gy吗?
假如 gy = new char[17];
表示什么意思?释放时delete[] gy能不能完全把申请的空间释放掉?
delete[]怎么用?
...全文
144 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
max_min_ 2012-11-07
  • 打赏
  • 举报
回复
不管你分配多少个空间 后面再delete的时候只要
delete[] GY;//析构函数会帮助你的
I_ask_who 2012-11-07
  • 打赏
  • 举报
回复
gy = (GY*)(void*)new char[16]; 编译器最终调用free的,只要地址是malloc注册过的就可以 delete[] (char**)(void*)gy;不知道会不会骗得过编译器
dhdahai 2012-11-07
  • 打赏
  • 举报
回复
我觉得只要申请和释放的空间大小一致即可 不过这样做就绕过了编译器的检查,没办法保证完全释放内存、或越界操作,没必要吧? 还是老老实实地:

typedef struct
{
int x1;
int x2
}GY;

GY* gy = new GY[16];

......

delete[] gy;
JiMoKuangXiangQu 2012-11-07
  • 打赏
  • 举报
回复
错误的企图导致错误的结果,研究这些东西不带来任何的好处,别浪费时间. char *gy = new char[17]; 表示申请一个17字符空间的动态数组. delete[] gy; 将释放上面申请的空间,对管理会指针这个指针申请了多少空间,不用程序员关心.
virtualxmars 2012-11-07
  • 打赏
  • 举报
回复
你这个情况是可以的,因为GY的默认析构函数不会做任何有害的事情,但这是特殊情况。应该尽量避免这样的做法
未注销 2012-11-07
  • 打赏
  • 举报
回复
你难道可以这样用int *p = new char[4] ????????????????????????? 因为int占4个字节,我申请了一个int的大小?

64,654

社区成员

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

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