free(): invalid next size (fast) の原因と対処法
*** glibc detected *** minigit: munmap_chunk(): invalid pointer: 0x0000000001b01050 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x760e6)[0x7f134cff20e6]
/lib64/libc.so.6(fclose+0x14d)[0x7f134cfe274d]
minigit[0x4026bc]
minigit[0x402a0e]
minigit[0x402c20]
/lib64/libc.so.6(__libc_start_main+0xfd)[0x7f134cf9acdd]
minigit[0x400fa9]
======= Memory map: ========
00400000-00404000 r-xp 00000000 fd:00 27790215 /home/vagrant/minigit/minigit
00603000-00604000 rw-p 00003000 fd:00 27790215 /home/vagrant/minigit/minigit
01b01000-01b22000 rw-p 00000000 00:00 0
原因と対処法
どうやらmallocするときのサイズの計算を間違っていたようで、小さく割り当てすぎたのが原因のようでした。outbuf = (char *)malloc(bufsiz);
bufsizのサイズが小さすぎたので、ちょっと大きめに割り当てたら解決しました。
参考
こちらの記事にmallocとfreeの仕組みについての詳しい解説があります。ありますが、今の私には理解できるはずもなく黙ってそっとページを閉じました><
malloc(3)のメモリ管理構造 | VA Linux Systems Japan株式会社
まとめ
C言語むずい・・・
カテゴリ:
C