我正在使用 malloc
在 C 程序中分配内存。我的程序有可能分配的内存多于系统的空间,此时程序崩溃。出于我的目的,如果 malloc
只返回 NULL
(就像它显然是 supposed to )会更好,这样我就可以捕获错误。相反,它所做的是抛出一个错误,提示“现在没有可用于编程的内存:调用 malloc 是不安全的。”并使程序崩溃。
我该如何解决这个问题?
编辑:我知道程序本身崩溃了,而不是因为我试图引用一个空指针。该程序从不直接调用 malloc
,而是调用我编写的调用 malloc
的函数,然后检查它是否返回 NULL
。它从来没有说 malloc
返回了 NULL
。
编辑 2:如果有帮助,这里是完整的错误输出:
Program received signal: “EXC_BAD_ACCESS”.
sharedlibrary apply-load-rules all
warning: Unable to restore previously selected frame.
Data Formatters temporarily unavailable, will re-try after a 'continue'. (The program being debugged was signaled while in a function called from GDB.
GDB remains in the frame where the signal was received.
To change this behavior use "set unwindonsignal on"
Evaluation of the expression containing the function (dlopen) will be abandoned.)
No memory available to program now: unsafe to call malloc
最佳答案
一旦您通过缓冲区溢出、野指针或其他错误在堆上乱涂乱画,malloc 的行为就会变得不确定,它可能会返回任何东西。
Malloc 只是一个用户空间库;它里面没有任何魔法。如果我在您的应用程序的客户名称链接列表中到处涂鸦,您以后访问该列表时会出现奇怪的行为。 Malloc 的行为方式相同,但由于 malloc 的使用是通过代码分发的,因果关系具有全局影响。
所有的答案都围绕着这样一个事实,即指针错误是 C 代码中最普遍的缺陷来源。你很幸运,你得到了一个 SIGBUS,它是缺陷的证据,可能与故障发生的地点和时间相差甚远。使用 valgrind帮助您找到真正的缺陷所在。
关于c - 使 malloc() 返回 NULL 而不是使程序崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3518283/