当前位置: 代码迷 >> C语言 >> free()如何与malloc()匹配的一个典型例子
  详细解决方案

free()如何与malloc()匹配的一个典型例子

热度:637   发布时间:2007-07-27 16:21:34.0
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  内存  源代码  

----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------