【问题标题】:What happens when malloc doesn't find the memory? [closed]malloc 找不到内存时会发生什么? [关闭]
【发布时间】:2020-07-16 18:12:58
【问题描述】:

mallocNULL 值返回给指针时会发生什么? 当这个 if 语句被执行时

if (ptr == NULL) { 

    printf("Memory not allocated.\n"); 

    exit(0); 

} 

我们退出了该计划。那么之后是什么让malloc 为相同的代码找到内存?

【问题讨论】:

    标签: c memory-management dynamic-memory-allocation null-pointer


    【解决方案1】:

    mallocNULL 值返回给指针时会发生什么?

    根据the manual page for malloc,可以分两种情况返回NULL

    1. 请求的大小是0
    2. 分配器无法找到足够的空闲内存来满足请求。

    假设 #2 发生,其背后可能有不同的原因:

    1. 您的系统确实内存不足。这可能是由您的程序或在同一台机器上运行的其他程序引起的。
    2. 您的进程超出了为其内存设置的resource limits(请参阅RLIMIT_ASRLIMIT_DATA)。
    3. 您的程序正在被控制分配并返回 NULL 用于测试目的的某事/某人跟踪/调试。

    那之后是什么让malloc 为相同的代码找到内存?

    使用与上述相同的编号,malloc 将在下一次运行程序时找到内存,如果:

    1. 在系统能够释放所需的内存量后重新启动程序。
    2. 程序在不同的rlimit 内存限制下重新启动。
    3. 程序在测试/调试上下文之外重新启动。

    【讨论】:

    • C17 有关于 0 的更新:“...如果请求的空间大小为零,则行为是实现定义的:要么返回空指针以指示错误,要么行为就像大小是某个非零值一样,除了返回的指针不应用于访问对象。”
    猜你喜欢
    • 1970-01-01
    • 2014-05-03
    • 2014-09-29
    • 1970-01-01
    • 2018-01-05
    • 2020-05-05
    • 2011-11-29
    • 2013-02-05
    • 1970-01-01
    相关资源
    最近更新 更多