相关疑难解决方法(0)

malloc(0)中有什么意义?

刚看到这段代码:

artist = (char *) malloc(0);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样做?

c malloc

115
推荐指数
5
解决办法
6万
查看次数

零大小的malloc

很简单的问题,我做了以下程序:

#include <stdlib.h>
int main(int argc, char ** argv)
{
    void * ptr;
    ptr = malloc(0);
    free(ptr);
}
Run Code Online (Sandbox Code Playgroud)

它不会在我的机器上发生段错误.它是stdlib malloc的可移植行为还是免费的,还是我在寻找麻烦?

编辑:看似不可移植的是malloc返回的值.问题是关于malloc(0)+自由组合,而不是ptr的值.

c malloc

45
推荐指数
2
解决办法
3万
查看次数

为什么malloc没有"耗尽"我电脑上的内存?

所以我有这个程序分配256 MB的内存,并在用户按下ENTER后释放内存并终止.

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char *p, s[2];

    p = malloc(256 * 1024 * 1024);
    if ( p == NULL) 
        exit(1);

    printf("Allocated"); 
    fgets(s, 2, stdin);
    free(p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我多次运行这个程序并对每个程序进行后台处理,直到没有足够的内存可以分配.但是,这从未发生过.我运行了一个linux top命令,甚至在多次运行这个程序之后,空闲内存永远不会下降到256 MB.

但是,另一方面,如果我使用calloc而不是malloc那时有一个巨大的差异:

p = calloc(256 * 1024 * 1024, 1);

现在,如果我运行该程序并对其进行后台处理,并重复,每次运行它时,可用内存将减少256 MB.为什么是这样?为什么不会malloc导致可用的可用内存发生变化,但是calloc呢?

c linux malloc memory-management

12
推荐指数
3
解决办法
2424
查看次数

标签 统计

c ×3

malloc ×3

linux ×1

memory-management ×1