c - malloc 错误处理

标签 c memory memory-management memory-leaks malloc

除了out of memory 之外,使用malloc 进行内存分配时可能会出现哪些错误?处理这些错误的最佳策略是什么?

对于内存不足异常,即使内存分配失败,是否有必要释放指针?

最佳答案

在 C 中没有异常(无论如何你都不能在语言中使用),所以 malloc 可以发出失败信号的唯一方法是返回一个空指针。所以你必须检查返回值。如果它是 0,则分配失败(无论出于何种原因)并且没有分配内存 - 没有任何东西可以释放;否则请求数量 (*) 的分配成功,您必须在不再需要时释放内存。

(*) 小心溢出:malloc 接受一个size_t 参数,它很可能是一个无符号数。如果您请求 size * sizeof(int) 字节且 size 无符号且乘法溢出(可能是在获取 size 的值时出错) ,结果是一个小数字。 malloc() 将为您返回的非空值分配少量字节,您可以根据 size 的实际(大)值对返回的数组进行索引,可能导致段错误或其等效

关于c - malloc 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106237/

相关文章:

C函数内存分配

python - Python中Pickle的MemoryError

c++ - 我可以将一个内存池用于多个 vector 吗?

c++ - 在没有显式命令的情况下在函数调用之间清除数组指针数据?

ios - 优化捕获列表

c - 字符串连接。 C

c# - 构建系统选择?

c - 我怎样才能让下一个 printf() 打印在同一行上而不是在它下面?

c - 在 C 中初始化包含位域的结构

c++ - 虚拟继承是如何工作的?