-3

我在 Mac 上编写并测试了一个小型 C 程序。但是,当我在 linux 机器上使用 make 文件进行编译时,我得到一个我无法理解的错误。任何帮助/指针表示赞赏。

    ssss@deas:a0$ 使
    gcc -Wall -g -c -o map.o map.c
    gcc -Wall -g -c -o main.o main.c
    gcc map.o main.o -o map
    ssss@deas:a0$ ./map
    插入 2 2
    映射添加成功(旧值为 )。
    *** 检测到 glibc *** ./map: free(): 无效指针:0x00007fd7e0826b58 ***
    ======= 回溯:=========
    /lib64/libc.so.6(+0x766d6)[0x7fd7e02ed6d6]
    ./map[0x400f5d]
    /lib64/libc.so.6(__libc_start_main+0xed)[0x7fd7e029823d]
    ./map[0x4007b9]
    ======= 内存映射:========
    00400000-00402000 r-xp 00000000 00:33 27911597 /home/k/k7r7/cs317/a0/map
    00601000-00602000 r--p 00001000 00:33 27911597 /home/k/k7r7/cs317/a0/map
    00602000-00603000 rw-p 00002000 00:33 27911597 /home/k/k7r7/cs317/a0/map
    00603000-00624000 rw-p 00000000 00:00 0 [堆]
    7fd7e0061000-7fd7e0076000 r-xp 00000000 08:01 917688 /lib64/libgcc_s.so.1
    7fd7e0076000-7fd7e0275000 ---p 00015000 08:01 917688 /lib64/libgcc_s.so.1
    7fd7e0275000-7fd7e0276000 r--p 00014000 08:01 917688 /lib64/libgcc_s.so.1
    7fd7e0276000-7fd7e0277000 rw-p 00015000 08:01 917688 /lib64/libgcc_s.so.1
    7fd7e0277000-7fd7e03fe000 r-xp 00000000 08:01 917554 /lib64/libc-2.14.1.so
    7fd7e03fe000-7fd7e05fd000 ---p 00187000 08:01 917554 /lib64/libc-2.14.1.so
    7fd7e05fd000-7fd7e0601000 r--p 00186000 08:01 917554 /lib64/libc-2.14.1.so
    7fd7e0601000-7fd7e0602000 rw-p 0018a000 08:01 917554 /lib64/libc-2.14.1.so
    7fd7e0602000-7fd7e0607000 rw-p 00000000 00:00 0
    7fd7e0607000-7fd7e0627000 r-xp 00000000 08:01 917547 /lib64/ld-2.14.1.so
    7fd7e07e3000-7fd7e07e6000 rw-p 00000000 00:00 0
    7fd7e0823000-7fd7e0827000 rw-p 00000000 00:00 0
    7fd7e0827000-7fd7e0828000 r--p 00020000 08:01 917547 /lib64/ld-2.14.1.so
    7fd7e0828000-7fd7e0829000 rw-p 00021000 08:01 917547 /lib64/ld-2.14.1.so
    7fd7e0829000-7fd7e082a000 rw-p 00000000 00:00 0
    7fff9db94000-7fff9dbb5000 rw-p 00000000 00:00 0 [堆栈]
    7fff9dbff000-7fff9dc00000 r-xp 00000000 00:00 0 [vdso]
    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
    中止

 

这怎么可能?

4

1 回答 1

2

这是一个糟糕的代码,它取消了一个指针,然后不能被释放。如果你写了这个,看看 e-fence 或 valgrind。

于 2012-09-16T03:19:59.573 回答