读书人

问下malloc通常情况下失败的概率

发布时间: 2013-07-08 14:13:00 作者: rapoo

问下malloc正常情况下失败的概率
一般malloc如果失败了,就应该意味着程序无法继续运行了吧

难道还有申请一个1K的空间失败了,在申请一个1K又成功的情况么
[解决办法]
一般小内存malloc失败的几率很小;
大内存失败的几率还是比较大的, 这时一般需要判断, 就算程序不得不终止也要友好的终止, 不能崩溃;
[解决办法]

引用:
一般malloc如果失败了,就应该意味着程序无法继续运行了吧

难道还有申请一个1K的空间失败了,在申请一个1K又成功的情况么


并不意味着无法继续运行,只是进入到另外一个分支而已。
如果两次分配之间,存在内存释放就可能出现这种情况。
[解决办法]
实话告诉你,在程序被系统kill之前你是没机会看到malloc=NULL的。
[解决办法]
malloc失败,程序没有停,你也可以停了。。。
[解决办法]
引用:
实话告诉你,在程序被系统kill之前你是没机会看到malloc=NULL的。


当然有可能:


void * s = malloc(~0);

printf("1024M:%p\n", s);

if (s == NULL)
{
s = malloc(1024 * 1024);

printf("1M:%p\n", s);
}

free(s);

[解决办法]
malloc失败的几率。。很小吧。。
[解决办法]
引用:
Quote: 引用:

实话告诉你,在程序被系统kill之前你是没机会看到malloc=NULL的。


当然有可能:


void * s = malloc(~0);

printf("1024M:%p\n", s);

if (s == NULL)
{
s = malloc(1024 * 1024);

printf("1M:%p\n", s);
}

free(s);


这种的确是不行了, 小一些是会被Kill的,。

读书人网 >C语言

热点推荐