malloc导致应用程序崩溃并显示内存映射

时间:2018-09-22 14:42:02

标签: c memory crash malloc

我正在开发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空间!

0 个答案:

没有答案