C语言如何预防内存泄漏

Hyacinthus_M 发布于 2012/12/03 11:12
阅读 574
收藏 2

@中山野鬼 你好,想跟你请教个问题:win7  vc++6.0 环境下(也装有VS2008 Team Suit),用C做程序练习时,该程序为Win32 Console Application,其中一个子函数动能是动态开辟了数组。其代码如下:

double* arrayInput(int cnt)
{
int i;
int Limits=cnt;
double *array=(double*)calloc(Limits,sizeof(double));

printf("Now you need input %d numbers:\n",Limits);

for(i=0;i<Limits;i++)
{
scanf("%d",array+i);
printf("\t");
}
return array;
}

在main()中多次调用arrayInput(n),但在运行过程中未显式释放开开辟的内存,在运行过程中我对交互式的输入效果不太满意就中断程序的运行了。在运行多次以后,短暂出现过鼠标键盘失灵、电脑响应很慢的情况,我突然意识到可能是内存泄漏了。

请问,在windows下用VC做非MFC编程时,如何才能有效地预防内存的泄漏呢?有没有一些好的工具。另外,对不泄漏的那部分内存有没有办法可以重新使用,我不久前才自觉的C/C++,但是也不希望因各种不同原因导致内存泄漏的发生,毕竟它的堆积是很可怕的。希望你可以给我个意见。谢谢

加载中
0
中山野鬼
中山野鬼

scanf("%d",array+i); %d?你是double类型。%d是整型吧。我几乎不用scanf所以一时不能确认。你这样做我觉得至少逻辑上就错了。

至于内存溢出,没什么好机制,只有好的设计方法和测试方法来杜绝。这也是C语言的魅力。哈。相信我。任何所谓内存自动检测工具,针对C语言的,都很片面。还是需要自己动手抓BUG的。

Hyacinthus_M
Hyacinthus_M
好的设计方法和测试方法?可以稍微举个例子吗?我搞不明白
Hyacinthus_M
Hyacinthus_M
是%lf.
0
戴威
戴威
自己写垃圾回收器
0
a
autocoder
程序中断是指程序停止吗? 如果都已经停止了何来泄漏?
Hyacinthus_M
Hyacinthus_M
我学C的时间不久,在程序运行过程中会卡在命令行窗口那十多秒。在程序结束后,没有被free的动态开辟的内存空间会因程序中断(程序并没有运行成功)而释放吗?
0
宏哥
宏哥

我在linux下用valgrind来检测内存泄露

指针越界, 好像只能做静态检测, 没有特别好的方法.

Hyacinthus_M
Hyacinthus_M
我连linux都没有装过,用惯了windows了。也不喜欢弄VMware装虚拟机。我倒是有块320G的移动硬盘,不知道能不能在那上面装试试。另外,问个关于硬件的问题啊,为什么我的本了换个块新硬盘后系统响应没有以前流畅了呢?可能是什么样的原因呢
0
Jooooooker
Jooooooker
当进程结束的时候你分配的内存都会被回收,所以并不存在程序退出后还有内存泄漏的问题,另外如果是纯C,自己记着free就好了,可以C++的话用智能指针可以一定程度改善内存泄露的问题。
返回顶部
顶部