【发布时间】:2011-03-31 21:40:51
【问题描述】:
我正在使用malloc 在 C 程序中分配内存。我的程序分配的内存可能超出系统的空间,此时程序崩溃。就我的目的而言,如果malloc 只返回NULL 会更好(就像它显然是supposed to),这样我就可以捕捉到错误。相反,它的作用是抛出一个错误,提示“现在没有可用于编程的内存:调用 malloc 不安全”。并使程序崩溃。
我该如何解决这个问题?
编辑:我知道程序自己崩溃了,而不是因为我试图引用一个空指针。该程序从不直接调用malloc,而是调用我编写的调用malloc的函数,然后检查它是否返回NULL。从来没有说malloc返回了NULL。
编辑 2:如果有帮助,这里是完整的错误输出:
节目接收信号:“EXC_BAD_ACCESS”。
共享库应用加载规则全部
警告:无法恢复之前选择的帧。
数据格式化程序暂时不可用,将在“继续”后重试。 (被调试的程序在从 GDB 调用的函数中发出信号。
GDB 保留在接收信号的帧中。
要更改此行为,请使用“set unwindonsignal on”
将放弃对包含函数 (dlopen) 的表达式的求值。)
现在没有可用于编程的内存:调用 malloc 不安全
【问题讨论】:
-
取决于您的操作系统。您使用的是 Linux、Mac 还是 Windows?
-
Mac OS X 雪豹。 (我不确定操作系统版本是否重要,但知道也无妨。)
-
你能发布你调用 malloc 的函数吗?
-
不要责怪图书馆。您的 malloc 可能工作正常,直到您的代码中的错误在堆上乱涂乱画,这让 malloc 很难过。
-
GWW:太长了。但是,相关部分如下所示: ptr = malloc(...); if (ptr == NULL) /* 错误处理 */ else return ptr; (编辑:抱歉格式化,如何缩进?)
标签: c macos crash memory-management malloc