CodeGuard 为什么检查不出来char *ch = new char[10];

RubyWR 2006-07-12 10:39:05
我用的是C++builder 6

char *ch = new char[10];
没有delete,为什么CodeGuard没有报错,检查.cgl文件也是正常!

以为没有启动CodeGuard,如果写delete ch,就可以正常报错,可是为什么我不释放内存不报错?
...全文
291 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
RubyWR 2006-07-13
  • 打赏
  • 举报
回复
回家用就可以了,在单位的机器上就不行,真是不明白。
感谢大家
netliuming 2006-07-12
  • 打赏
  • 举报
回复
不知道 xiaoshi0(小鱼儿) ,BlueDeepOcean(蓝色·深海)等是否测试过楼主代码
,我测试是可以报错,不象楼主说的那样。bcb6 + xp server.
xiaoshi0 2006-07-12
  • 打赏
  • 举报
回复
不要说你用了其他的可以自动释放内存的语言,就有借口说不熟悉。

哪些语言都是采用了垃圾收集机制的,会造成运行速度和效率降低。

C++不是不可以加垃圾收集器,而是为了效率考虑没有加。

每个程序员都应该知道自己申请的内存在什么时候得到释放,就算是用垃圾收集,也应该知道。
RubyWR 2006-07-12
  • 打赏
  • 举报
回复
谁有空帮忙试一下,我总觉不是CodeGuard本身的问题。
感谢!

用C#.net用的我对释放内存都很陌生了。 :(
RubyWR 2006-07-12
  • 打赏
  • 举报
回复
哎,看来内存这种东西只能自己把握了,不能用工具
xiaoshi0 2006-07-12
  • 打赏
  • 举报
回复
我真的不清楚,如果你将CodeGuard的所有的选项都已经选上了,那应该可以检测出来

或者你将你的代码改为

char *ch = new char[1024];

这样改大一点,可能太小了检测不出来。
RubyWR 2006-07-12
  • 打赏
  • 举报
回复
求教xiaoshi0(小鱼儿),是不是我设置上的事?
xiaoshi0 2006-07-12
  • 打赏
  • 举报
回复
无语……
RubyWR 2006-07-12
  • 打赏
  • 举报
回复
晕你个头,那这种情况我怎么能看出来程序有内存漏洞,我看了他的.cgl文件也没有记录。退出的时候CodeGuard也没有报错。
xiaoshi0 2006-07-12
  • 打赏
  • 举报
回复
晕,这得到退出的时候才能报错

你在运行的时候不能保证你不会用那个内存了。

C++没有运行时的内存检测机制
RubyWR 2006-07-12
  • 打赏
  • 举报
回复
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *ch = new char[10];
}
执行多次,CodeGuard没有任何反映
RubyWR 2006-07-12
  • 打赏
  • 举报
回复
啥意思,不会不报错吧,刚用这个,我想这个不会连不释放内存的错误都不报吧?
是不是我设置上的事?
beautywine 2006-07-12
  • 打赏
  • 举报
回复
访问内存越界时会检测到

如果程序不执行那一步,那它也不会提示。
BlueDeepOcean 2006-07-12
  • 打赏
  • 举报
回复
据传言说CodeGuard不能够真正地检测内存泄漏嘛。
但是CodeGuard的帮助我全看了,而且相应的错误跟踪调试报告我也看了,和传言有所不同。但实际上,多数人对此功能持有异议。
xiaoshi0 2006-07-12
  • 打赏
  • 举报
回复
首先我不知道为什么没有报错

但可以肯定的是,如果你delete ch,那是语法上的错误,编译器应该提示

但你没delete[] ch是你编程逻辑上的错误
jaffy 2006-07-12
  • 打赏
  • 举报
回复
实践是检验一切的真理,我也测试了,的确报错了,不知道楼主是怎么测试的?^_^
xiaoshi0 2006-07-12
  • 打赏
  • 举报
回复
没测试过,我工作时不用bcb。

再说我没肯定说应该报错还是不报错。

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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