|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在编程的时候想用递归去实现动态申请内存题目,使用malloc来计算能最大申请多少内存空间,但是遇到一下问题无法解决,在gcc编译后显示Killed,调试又没有发现哪里有问题自己实在无法解决,麻烦各位大佬解答一下
代码如下:
#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;
} |
|