【发布时间】:2010-03-01 03:17:56
【问题描述】:
我使用代码魔法工具链在 Linux (Fedora) 上构建了一个纯 C 代码。这适用于 ARM Cortex-A8 目标。此代码在 Cortex A8 板上运行,运行嵌入式 Linux。
当我为一些测试用例运行此代码时,它为一些大尺寸 (10MB) 进行动态内存分配 (malloc),它在一段时间后崩溃,并给出如下错误消息:
select 1 (init), adj 0, size 61, to kill
select 1030 (syslogd), adj 0, size 64, to kill
select 1032 (klogd), adj 0, size 74, to kill
select 1227 (bash), adj 0, size 378, to kill
select 1254 (ppp), adj 0, size 1069, to kill
select 1255 (TheoraDec_Corte), adj 0, size 1159, to kill
send sigkill to 1255 (TheoraDec_Corte), adj 0, size 1159
Program terminated with signal SIGKILL, Killed.
然后,当我使用为目标构建的 gdb 为同一测试用例调试此代码时,发生此动态内存分配的点,代码无法分配该内存,malloc 返回NULL。但是在正常的独立运行期间,我相信malloc 应该无法分配,但奇怪的是它可能不会返回NULL,但它会崩溃并且操作系统会杀死我的进程。
- 为什么在 gdb 和没有调试器的情况下运行时这种行为会有所不同?
- 为什么
malloc会失败却不返回NULL。这可能吗,或者我收到错误消息的原因是什么? - 我该如何解决这个问题?
谢谢,
-AD
【问题讨论】:
-
你为什么说你希望你的 10MB
malloc无论如何都会失败?你的系统没有那么多内存? -
你提到的错误信息是什么?
-
在 OP 中遗漏了错误消息,现在编辑以添加相同的内容。