我正在开发c应用程序;调用malloc时,应用程序崩溃并显示以下输出:
======= Backtrace: =========
/lib64/libc.so.6[0x318f871ed1]
/lib64/libc.so.6(__libc_malloc+0x7d)[0x318f8732ad]
./myprocess[0x40fbf7]
./myprocess[0x40daaa]
./myprocess[0x40d16a]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x318f81d8b4]
./myprocess[0x40cfe9]
======= Memory map: ========
00400000-004ff000 r-xp 00000000 fd:00 37159057 ./myprocess
006ff000-00705000 rw-p 000ff000 fd:00 37159057 ./myprocess
00705000-008fe000 rw-p 00705000 00:00 0
1c265000-21717000 rw-p 1c265000 00:00 0
318f400000-318f41a000 r-xp 00000000 fd:00 2490699 /lib64/ld-2.5.so
318f61a000-318f61b000 r--p 0001a000 fd:00 2490699 /lib64/ld-2.5.so
318f61b000-318f61c000 rw-p 0001b000 fd:00 2490699 /lib64/ld-2.5.so
318f800000-318f94a000 r-xp 00000000 fd:00 2490700 /lib64/libc-2.5.so
318f94a000-318fb4a000 ---p 0014a000 fd:00 2490700 /lib64/libc-2.5.so
318fb4a000-318fb4e000 r--p 0014a000 fd:00 2490700 /lib64/libc-2.5.so
318fb4e000-318fb4f000 rw-p 0014e000 fd:00 2490700 /lib64/libc-2.5.so
318fb4f000-318fb54000 rw-p 318fb4f000 00:00 0
318fc00000-318fc02000 r-xp 00000000 fd:00 2490701 /lib64/libdl-2.5.so
318fc02000-318fe02000 ---p 00002000 fd:00 2490701 /lib64/libdl-2.5.so
318fe02000-318fe03000 r--p 00002000 fd:00 2490701 /lib64/libdl-2.5.so
318fe03000-318fe04000 rw-p 00003000 fd:00 2490701 /lib64/libdl-2.5.so
3190000000-3190082000 r-xp 00000000 fd:00 2490702 /lib64/libm-2.5.so
3190082000-3190281000 ---p 00082000 fd:00 2490702 /lib64/libm-2.5.so
3190281000-3190282000 r--p 00081000 fd:00 2490702 /lib64/libm-2.5.so
3190282000-3190283000 rw-p 00082000 fd:00 2490702 /lib64/libm-2.5.so
3190400000-3190415000 r-xp 00000000 fd:00 2490704 /lib64/libpthread-2.5.so
3190415000-3190614000 ---p 00015000 fd:00 2490704 /lib64/libpthread-2.5.so
3190614000-3190615000 r--p 00014000 fd:00 2490704 /lib64/libpthread-2.5.so
3190615000-3190616000 rw-p 00015000 fd:00 2490704 /lib64/libpthread-2.5.so
3190616000-319061a000 rw-p 3190616000 00:00 0
3190c00000-3190c07000 r-xp 00000000 fd:00 2490715 /lib64/librt-2.5.so
3190c07000-3190e07000 ---p 00007000 fd:00 2490715 /lib64/librt-2.5.so
3190e07000-3190e08000 r--p 00007000 fd:00 2490715 /lib64/librt-2.5.so
3190e08000-3190e09000 rw-p 00008000 fd:00 2490715 /lib64/librt-2.5.so
3193000000-3193015000 r-xp 00000000 fd:00 2490706 /lib64/libnsl-2.5.so
3193015000-3193214000 ---p 00015000 fd:00 2490706 /lib64/libnsl-2.5.so
3193214000-3193215000 r--p 00014000 fd:00 2490706 /lib64/libnsl-2.5.so
3193215000-3193216000 rw-p 00015000 fd:00 2490706 /lib64/libnsl-2.5.so
3193216000-3193218000 rw-p 3193216000 00:00 0
31a1a00000-31a1ae6000 r-xp 00000000 fd:00 41193830 /usr/lib64/libstdc++.so.6.0.8
31a1ae6000-31a1ce5000 ---p 000e6000 fd:00 41193830 /usr/lib64/libstdc++.so.6.0.8
31a1ce5000-31a1ceb000 r--p 000e5000 fd:00 41193830 /usr/lib64/libstdc++.so.6.0.8
31a1ceb000-31a1cee000 rw-p 000eb000 fd:00 41193830 /usr/lib64/libstdc++.so.6.0.8
31a1cee000-31a1d00000 rw-p 31a1cee000 00:00 0
31a1e00000-31a1e0d000 r-xp 00000000 fd:00 2490703 /lib64/libgcc_s-4.1.2-20080102.so.1
31a1e0d000-31a200d000 ---p 0000d000 fd:00 2490703 /lib64/libgcc_s-4.1.2-20080102.so.1
31a200d000-31a200e000 rw-p 0000d000 fd:00 2490703 /lib64/libgcc_s-4.1.2-20080102.so.1
2b52154c7000-2b52154c9000 rw-p 2b52154c7000 00:00 0
2b52154c9000-2b5217aa0000 r-xp 00000000 fd:00 41682874 /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1
2b5217aa0000-2b5217b9f000 ---p 025d7000 fd:00 41682874 /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1
2b5217b9f000
我很确定崩溃是由于malloc发生的,因为我在下面的代码中获得了第一行日志,但是我没有得到第二行!
SendLogMsg("first line of log");
p_my_structure = malloc(sizeof(my_structure));
SendEmsEvtBegstp("second line of log");
my_structure定义为:
typedef struct __my_structure {
char cis [12];
char Type;
long long oQty;
long long bQty;
long long sQty;
} my_structure;
编辑: 顺便说一句,当进程崩溃时,我的机器上有很多可用的ram空间!