-3

Mac で小さな C プログラムを作成してテストしました。ただし、Linux マシンで make ファイルを使用してコンパイルすると、理解できないエラーが発生します。ヘルプ/ポインタをいただければ幸いです。

    ssss@deas:a0$ make
    gcc -Wall -g -c -o map.o map.c
    gcc -Wall -g -c -o main.o main.c
    gcc map.o main.o -o マップ
    ssss@deas:a0$ ./map
    挿入 2 2
    マッピングが正常に追加されました (古い値は でした)。
    *** glibc が検出されました *** ./map: free(): 無効なポインター: 0x00007fd7e0826b58 ***
    ======= バックトレース: =========
    /lib64/libc.so.6(+0x766d6)[0x7fd7e02ed6d6]
    ./マップ[0x400f5d]
    /lib64/libc.so.6(__libc_start_main+0xed)[0x7fd7e029823d]
    ./マップ[0x4007b9]
    ======= メモリマップ: ========
    00400000-00402000 r-xp 00000000 00:33 27911597 /ホーム/k/k7r7/cs317/a0/マップ
    00601000-00602000 r--p 00001000 00:33 27911597 /home/k/k7r7/cs317/a0/map
    00602000-00603000 rw-p 00002000 00:33 27911597 /ホーム/k/k7r7/cs317/a0/マップ
    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 に答える