关于动态申请内存问题:malloc
在编程的时候想用递归去实现动态申请内存题目,使用malloc来计算能最大申请多少内存空间,但是遇到一下问题无法解决,在gcc编译后显示Killed,调试又没有发现哪里有问题自己实在无法解决,麻烦各位大佬解答一下{:5_92:}代码如下:
#include <stdio.h>
#include <stdlib.h>
long int Add(size_t num);
int main(void)
{
size_t num=1024*1024;//MB
long int size=Add(num);
if(0 == size)
{
printf("程序执行失败!!!");
exit(1);
}
printf("能申请最大的内存空间为:%ldByte=%fKB=%fMB=%fGB\n",\
size,size/1024.0,size/1048576.0,size/1073741824.0);
return 0;
}
long int Add(size_t num)
{
//先申明一个装动态内存空间的指针,静态变量
static int *temp=NULL;
//再申明一个装总申请内存空间的计数,静态变量
static long int size=0;
//内存空间从大到小进行申请
temp=(int *)malloc(num);
//递归退出条件
if(num == 0)
{
//将内存空间释放
free(temp);
return size;
}
if(temp == NULL)
{
//说明这个大内层申请失败了,递归调用小内层
Add(num/1024);
}
else
{
//说明申请成功
size+=num;
Add(num);
}
return 0;
} 内存泄漏。你这temp指针作为静态变量,指向申请的那片内存空间,递归一层后又指向新申请的空间,之前的内存空间不就直接丢了,还怎么free linux系统在进程占用内存过多的情况下就会kill掉它,所以你这样是不行的。
可以这样试试:打开一个文件,每申请一次就往里面写下本次申请的内存数量,然后flush防止数据丢失,进程被kill掉后再用文件中的数据算出可申请的内存。
页:
[1]