| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1224 人关注过本帖
标题:free()如何与malloc()匹配的一个典型例子
只看楼主 加入收藏
西门吹雪1982
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-7-27
收藏
 问题点数:0 回复次数:1 
free()如何与malloc()匹配的一个典型例子
以下是源代码,欢迎大家讨论malloc() free()以及动态内存分配泄露的相关问题
我也对内存泄露这个问题不是很明白,抛砖引玉了

求101--200之间的所有素数。有很多种做法。这里我们使用malloc()申请动态内存。
下面这两句中,
第二句int *Leap=Leap_begin;是否多余呢??
为什么多定义一个指针变量??
直接使用int *Leap=(int *) malloc(100*sizeof(int));这一句不更简洁吗??

通过我在VC++ 6.0下的运行结果发现:
直接使用int *Leap=(int *) malloc(100*sizeof(int));的话
后面的free(Leap),这句话会带来致命的错误,输出完所有素数之后,对话框给出
一个大大的红色X号, Debug Assertion Failed!
而采用free(Leap_begin)这种方法, 就没问题了!!



int *Leap_begin=(int *) malloc(100*sizeof(int));
int *Leap=Leap_begin;


#include <stdio.h>
#include <math.h>
#include <stdlib.h>
void main()
{
int leap=1, i=0, j=0, k=0, h=0;
int *Leap_begin=(int *) malloc(100*sizeof(int));
int *Leap=Leap_begin;
printf("the Leap integars between 101 and 200 are:\n");
for (i=101; i<=200; i++){
leap=1;
k=(int)(sqrt(i));
for (j=2; j<=k; j++){
if (i%j==0){
leap=0; break;}
}
if (leap){
*Leap=i;
h++;
Leap++;
printf("%d ",i);
if (h%10==0)
printf("\n");

}
free(Leap_begin);
}
搜索更多相关主题的帖子: malloc free int 内存 源代码 
2007-07-27 16:21
vbc
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:352
专家分:147
注 册:2006-12-30
收藏
得分:0 

为什么会出错,那是因为你自己不细心,你用Leap++,Leap已经指到的数组尾了,由于Leap_begin你没有改变它的值所以用它来释放内存是可以的,但Leap不行.


清远鹏程万里人才网:[url=http://www.]http://www.[/url]zq.,qy.
2007-07-27 18:31
快速回复:free()如何与malloc()匹配的一个典型例子
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013314 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved