为什么这一句delete[] szBuf 执行时会报错?

ynduanlian 2010-02-11 01:19:43
从网上找了段把中文大五码转为GBK字符的代码:

void __fastcall BIG52GBK(char *szBuf)
{
if(!strcmp(szBuf,"")) return;
int iLen=MultiByteToWideChar (950, 0, szBuf, -1, NULL,0) ;
wchar_t *pws=new wchar_t[iLen+1];
int nReturn = MultiByteToWideChar(950, 0, szBuf, -1, pws, iLen + 1);

iLen=WideCharToMultiByte(936, 0, pws, -1, NULL, 0, NULL, NULL);
// delete[] szBuf;
szBuf=new char[iLen+1];
WideCharToMultiByte(936, 0, pws, -1, szBuf, iLen, NULL, NULL);
delete[] pws;
}

奇怪的是,如果我把 // delete[] szBuf 的注释取消掉,执行程序时就会报错,这个非常难让人理解,难道new 分配了内存,不是应当delete掉再重新分配吗?

帮助里说:
You should use the delete operator to remove all memory that has been allocated by the new operator. Failure to free memory can result in memory leaks.
...全文
173 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Maconel 2010-02-13
  • 打赏
  • 举报
回复
请参看《c++高质量编程》,里边专门讲了这个问题。
这不是什么大部头的书,只是篇文章而已,网上很容易找得到。
ynduanlian 2010-02-11
  • 打赏
  • 举报
回复
引用 4 楼 maconel 的回复:
szBuf是一个传值参数,函数内改变它,函数外还是老的值。这一点,可以看下《c++高质量编程》。

一般来说分配内存,应该谁分配谁释放,看你这个函数,似乎是想第一次在函数外分配内存,函数内释放并重新分配,最后在函数外释放,真是太混乱了。

太惭愧了,我想要实现的目的是传给来一个字符串,然后修改字符串的内容,再传出去,也就是想实现传地址的效果,请指点以一下怎么写才好.
Maconel 2010-02-11
  • 打赏
  • 举报
回复
szBuf是一个传值参数,函数内改变它,函数外还是老的值。这一点,可以看下《c++高质量编程》。

一般来说分配内存,应该谁分配谁释放,看你这个函数,似乎是想第一次在函数外分配内存,函数内释放并重新分配,最后在函数外释放,真是太混乱了。
ydlchina 2010-02-11
  • 打赏
  • 举报
回复
这个是个参数,没必要在函数体内delete,如果人家给个数组,如果你delete那不就错了.
ydlchina 2010-02-11
  • 打赏
  • 举报
回复
// delete[] szBuf;
szBuf=new char[iLen+1];

这两句是否应该颠倒,使用就正确了
ynduanlian 2010-02-11
  • 打赏
  • 举报
回复
从网上找了段把中文大五码转为GBK字符的代码:
void __fastcall BIG52GBK(char *szBuf)
{
if(!strcmp(szBuf,"")) return;
int iLen=MultiByteToWideChar (950, 0, szBuf, -1, NULL,0) ;
wchar_t *pws=new wchar_t[iLen+1];
int nReturn = MultiByteToWideChar(950, 0, szBuf, -1, pws, iLen + 1);

iLen=WideCharToMultiByte(936, 0, pws, -1, NULL, 0, NULL, NULL);
// delete[] szBuf;
szBuf=new char[iLen+1];
WideCharToMultiByte(936, 0, pws, -1, szBuf, iLen, NULL, NULL);
delete[] pws;
}
随着通信电子技术的迅速发展,信息技术给家居行业产生了深远的影响,家居环境的智能化监控已经成为智能家居的一个重要的发展方向。人们逐渐对自己的生活提出一种更高的要求,他们需要一种智能化、可交互,并且融合现代创新科技的产品来改善他们的生活环境,使他们生活更加安全、舒适、便捷、智能。本文根据智能家居的发展背景和研究现状,并且从实用性和可行性角度出发,研究设计了一种基于STM32单片机的智能家居系统。该系统由一个多功能综合的技术系统组成,各个多功能子系统间具有协同配合能力。基于STM32单片机实现的功能子系统包括:智能温度检测,智能湿度检测,智能烟雾/火灾检测智能检测,无线传输,人机交互机构,风扇调节,报警模块。 整个系统分为前端51单片机采集板和后端STM32单片机接收板。 采集板使用DHT11温湿度传感器、MQ烟雾传感器完成室内家居环境的采集。然后通过nRFL24L01将采集到的数据发送给后端。接收板使用LCD1602完成数据显示、使用蜂鸣器模块报警,使用风扇驱动模块调节室内家居环境。本文完成了智能家居控制系统前端、后端软硬件的设计,使用Altium designer绘制了电路原理图,使用Keil C完成了51单片机和STM32单片机的编程与调试。 最后,对本文设计的基于STM32的智能家居控制系统进行部署调试。试验结果表明,该系统可成功应用在智能家居环境检测调节和火灾安全防护的领域,可提高家居生活智能化水平。

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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