我在Linux(Fedora)上使用代码魔法工具链构建了一个简单的C代码。这是针对ARM Cortex-A8目标的。该代码运行在运行嵌入式Linux的Cortex A8板上。如果独立运行,gdb下的Linux上的C代码运行方式不同吗?
当运行一段测试情况下,确实对于一些大尺寸(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'失败呢?系统上没有那么多的内存? – vladr 2010-03-01 03:20:10
你提到的那个错误信息是什么? – 2010-03-01 03:32:19
错过了OP中的错误消息,现在编辑添加相同。 – goldenmean 2010-03-01 04:22:15