関数のエラー適用による致命的なエラー(一)--strcpy


1つのcoderにとって、自分が出会った間違いや解決方法を記録することが重要です.このシリーズの博文を書いて、後用に備えて、皆さんにも役に立つことを望んでいます.
次は、プログラムをデバッグしているときに発生したエラーです.
エラーlog:
F/libc    ( 7081): @@@ ABORTING: invalid address or address of corrupt block 0x736ab1a8 passed to dlfree 
F/libc    ( 7081): Fatal signal 11 (SIGSEGV), thread 7130 (UnityMain) 
I/DEBUG   ( 3309): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
I/DEBUG   ( 3309): Build fingerprint: 'google/mantaray/manta:4.3/JWR66V/737497:user/release-keys' 
I/DEBUG   ( 3309): Revision: '8' 
I/DEBUG   ( 3309): pid: 7081, tid: 7130, name: UnityMain  >>> com.jellk.cityrun3d2 <<< 
I/DEBUG   ( 3309): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad 
I/DEBUG   ( 3309): Abort message: '@@@ ABORTING: invalid address or address of corrupt block 0x736ab1a8 passed to dlfree' 
I/DEBUG   ( 3309):     r0 00000027  r1 71c5e8e0  r2 00000008  r3 deadbaad 
I/DEBUG   ( 3309):     r4 00000000  r5 75969584  r6 40058000  r7 736ab1b0 
I/DEBUG   ( 3309):     r8 72000e10  r9 73ba887c  sl 72000e10  fp 00000000 
I/DEBUG   ( 3309):     ip 00000001  sp 75969580  lr 4008cd7b  pc 4008a2e4  cpsr 600f0030 
I/DEBUG   ( 3309):     d0  2064657373617064  d1  736572646461206c 
I/DEBUG   ( 3309):     d2  64646120726f2066  d3  20666f2073736572 
I/DEBUG   ( 3309):     d4  612e312d3264336e  d5  2f6b6361625f6b70 
I/DEBUG   ( 3309):     d6  622f737465737361  d7  2f617461442f6e69 
I/DEBUG   ( 3309):     d8  0000000000000000  d9  0000000000000000 
I/DEBUG   ( 3309):     d10 0000000000000000  d11 0000000000000000 
I/DEBUG   ( 3309):     d12 0000000000000000  d13 0000000000000000 
I/DEBUG   ( 3309):     d14 0000000000000000  d15 0000000000000000 
I/DEBUG   ( 3309):     d16 000000010628d803  d17 0000000000000001 
I/DEBUG   ( 3309):     d18 0000000000000001  d19 fb30000000000000 
I/DEBUG   ( 3309):     d20 fb30000000000025  d21 0000000000000001 
I/DEBUG   ( 3309):     d22 0000000000000061  d23 0000000000000001 
I/DEBUG   ( 3309):     d24 0000000000000000  d25 0000000000000fff 
I/DEBUG   ( 3309):     d26 00000000000000d0  d27 00000000000000d0 
I/DEBUG   ( 3309):     d28 0000007633533000  d29 00000076335330d0 
I/DEBUG   ( 3309):     d30 0000000000000001  d31 0000000000000001 
I/DEBUG   ( 3309):     scr 80000010 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): backtrace: 
I/DEBUG   ( 3309):     #00  pc 0001e2e4  /system/lib/libc.so 
I/DEBUG   ( 3309):     #01  pc 0001c4cc  /system/lib/libc.so (abort+4) 
I/DEBUG   ( 3309):     #02  pc 000121bd  /system/lib/libc.so 
I/DEBUG   ( 3309):     #03  pc 00010e75  /system/lib/libc.so (dlfree+1184) 
I/DEBUG   ( 3309):     #04  pc 0000d9c3  /system/lib/libc.so (free+10) 
I/DEBUG   ( 3309):     #05  pc 0015188c   
I/DEBUG   ( 3309):     #06  pc 00153138   
I/DEBUG   ( 3309):     #07  pc 00027e1c   
I/DEBUG   ( 3309):     #08  pc 0018c634   
I/DEBUG   ( 3309):     #09  pc 0000dd80  /data/app-lib/com.jellk.cityrun3d2-1/libmono.so (mono_jit_init_version+40) 
I/DEBUG   ( 3309):     #10  pc 002c0334   
I/DEBUG   ( 3309):     #11  pc 003b15a8   
I/DEBUG   ( 3309):     #12  pc 003b1a2c   
I/DEBUG   ( 3309):     #13  pc 0001dc0c  /system/lib/libdvm.so (dvmPlatformInvoke+112) 
I/DEBUG   ( 3309):     #14  pc 0004de6f  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398) 
I/DEBUG   ( 3309):     #15  pc 00027020  /system/lib/libdvm.so 
I/DEBUG   ( 3309):     #16  pc 0002b5d0  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184) 
I/DEBUG   ( 3309):     #17  pc 0005fe91  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+292) 
I/DEBUG   ( 3309):     #18  pc 0005febb  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20) 
I/DEBUG   ( 3309):     #19  pc 00054c4f  /system/lib/libdvm.so 
I/DEBUG   ( 3309):     #20  pc 0000ca58  /system/lib/libc.so (__thread_entry+72) 
I/DEBUG   ( 3309):     #21  pc 0000cbd4  /system/lib/libc.so (pthread_create+208) 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): stack: 
I/DEBUG   ( 3309):          75969540  77df28b0   
I/DEBUG   ( 3309):          75969544  00000000   
I/DEBUG   ( 3309):          75969548  400b4170  /system/lib/libc.so 
I/DEBUG   ( 3309):          7596954c  71c5e8e0   
I/DEBUG   ( 3309):          75969550  00000015   
I/DEBUG   ( 3309):          75969554  4008bd61  /system/lib/libc.so (__sflush+52) 
I/DEBUG   ( 3309):          75969558  400b4264  /system/lib/libc.so 
I/DEBUG   ( 3309):          7596955c  400b41c4  /system/lib/libc.so 
I/DEBUG   ( 3309):          75969560  00000000   
I/DEBUG   ( 3309):          75969564  4008cd7b  /system/lib/libc.so (_fwalk+34) 
I/DEBUG   ( 3309):          75969568  4008c029  /system/lib/libc.so (_cleanup) 
I/DEBUG   ( 3309):          7596956c  75969584  [stack:7130] 
I/DEBUG   ( 3309):          75969570  40058000   
I/DEBUG   ( 3309):          75969574  736ab1b0   
I/DEBUG   ( 3309):          75969578  df002777   
I/DEBUG   ( 3309):          7596957c  e3a070ad   
I/DEBUG   ( 3309):     #00  75969580  400b7204   
I/DEBUG   ( 3309):          75969584  fffffbdf   
I/DEBUG   ( 3309):          75969588  720aa000   
I/DEBUG   ( 3309):          7596958c  0000005a   
I/DEBUG   ( 3309):          75969590  ffffffff   
I/DEBUG   ( 3309):          75969594  00000000   
I/DEBUG   ( 3309):          75969598  00000003   
I/DEBUG   ( 3309):          7596959c  759695c4  [stack:7130] 
I/DEBUG   ( 3309):          759695a0  400b6ff4   
I/DEBUG   ( 3309):          759695a4  400884d0  /system/lib/libc.so (__pthread_clone) 
I/DEBUG   ( 3309):     #01  759695a8  00000000   
I/DEBUG   ( 3309):          759695ac  4007e1c1  /system/lib/libc.so 
I/DEBUG   ( 3309):     #02  759695b0  759699d4  [stack:7130] 
I/DEBUG   ( 3309):          759695b4  00000055   
I/DEBUG   ( 3309):          759695b8  759695c4  [stack:7130] 
I/DEBUG   ( 3309):          759695bc  75969619  [stack:7130] 
I/DEBUG   ( 3309):          759695c0  759699c3  [stack:7130] 
I/DEBUG   ( 3309):          759695c4  20404040   
I/DEBUG   ( 3309):          759695c8  524f4241  /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG   ( 3309):          759695cc  474e4954  /dev/ashmem/dalvik-heap (deleted) 
I/DEBUG   ( 3309):          759695d0  6e69203a  /system/framework/core.odex 
I/DEBUG   ( 3309):          759695d4  696c6176  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695d8  64612064  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695dc  73657264  [stack:7097] 
I/DEBUG   ( 3309):          759695e0  726f2073  /system/lib/libwebcore.so 
I/DEBUG   ( 3309):          759695e4  64646120  /dev/ashmem/dalvik-mark-stack (deleted) 
I/DEBUG   ( 3309):          759695e8  73736572  /dev/mali0 
I/DEBUG   ( 3309):          759695ec  20666f20   
I/DEBUG   ( 3309):          ........  ........ 
I/DEBUG   ( 3309):  
I/DEBUG   ( 3309): memory near r1: 
I/DEBUG   ( 3309):     71c5e8c0 00000004 71c61bf0 40b51888 71c61e70   
I/DEBUG   ( 3309):     71c5e8d0 00000003 00000007 00000004 0000100b   
I/DEBUG   ( 3309):     71c5e8e0 6d206e49 69616d67 4e4a206e 6e4f5f49   
I/DEBUG   ( 3309):     71c5e8f0 64616f4c 0000000a 2d202020 78616d20   

この問題に直面して、私は極端に葛藤して、ちょうどこのように考え始めました“libcの中の関数が問題を出した以上、それでは私はどんな方法がありますか?”
最後にネットで関連問題を見て、他の人の解決構想を見て、関連リンクは以下の通りです.
http://stackoverflow.com/questions/12246312/fatal-signal-11-and-invalid-heap-address-in-dlfree-error-when-using-glshaderbina
http://stackoverflow.com/questions/19463705/aborting-invalid-heap-address-in-dlfree-addr-0x00000156
これらを見て、私は「自分の前の考えが間違っていて、libcの問題ではなく、自分のcodeに問題がある」と確信し、自分のcode(実はオープンソースプロジェクトで、多くのコード)を見に戻りました.
私がデバッグして一歩一歩調べたところ、strcpyの使用ミスが原因で、これは非常に低級なエラーで、私はbufに十分な空間を割り当てず、strcpy(buf、src)を直接使用したことが分かった.この問題を修正した後、このエラーはpassになった.
最後に、上記の問題が発生した場合に説明します.
第一に、自分のcodeが間違っているに違いない.
第二に、自分のコードが間違っていることを自分に伝えなければなりません.言い訳をしないでください.
第三に、第一と第二を繰り返す.
第四に、この問題が発生したのはstrcpyが引き起こしたとは限らず、他の関数を使用して引き起こしたのかもしれない.
第五に、strcpyの使用エラーは、前のエラーを引き起こす可能性があります.
第六に、みんながレンガを撮って、分かち合って、交流することを歓迎します.