????????? 在做嵌入式产品常见死机原因有很多种,其中之一就是strlen函数引起的。这个函数大家不会陌生,学c语言最基本的函数了,但在实际使用中偶尔不小心还是可能会引起段错误造成死机的。为什么呢?
?? 函数原型:unsigned? int ?strlen ( char ?*s);
也就是输入一个字符串函数指针,判断这个字符串有多长。当你不小心输入了一个空指针的时候,错误就来了。很多时候我们都知道使用指针之前都判断一下这个指针是否是空指针,在开发中往往有时图省事或者自认为这里不判断也不会有事,盲目自信了一把!因此,我们还是得养成良好得习惯,使用之前还是要验证一下合法性。
段错误示例如下:
[2021/9/28 18:34:42] NMI [2021/9/28 18:34:42] msp: 200087b8? psp: 3832dce8? stack(reg0): 200087b8? reg4: 20008798 [2021/9/28 18:34:42] r0: 00000000? r1: 00000001? r2: e000ed00? r3: 80000833 [2021/9/28 18:34:42] r4: 00000000? r5: 00000000? r6: 7ffffff8? r7: 3832de00 [2021/9/28 18:34:42] r8: 00000000? r9: ffffffff? r10: 2000fd24? r11: 00000001 [2021/9/28 18:34:42] r12: 00000030? r14(lr): 18124c19? r15(pc): 18124c18? xPSR: 61000033 [2021/9/28 18:34:42] The exception call: 200087b8 [2021/9/28 18:34:42] The exception end: 20008800 [2021/9/28 18:34:42] PC call-0: 18124c18: f7ff fffe 4770 460b 0781 d503 [2021/9/28 18:34:42] PC call-1: 18124c14: f000 f828 f7ff fffe 4770 460b [2021/9/28 18:34:42] The normal call: 3832dce8
[2021/9/28 18:34:42] PC call_normal-0: 1811a076: 42d3 d100 bd10 f813 4d01 f801 [2021/9/28 18:34:42] PC call_normal-1: 1812060e: f7f9 fd21 68a3 1b9b 60a3 6823 [2021/9/28 18:34:42] PC call_normal-2: 1812060e: f7f9 fd21 68a3 1b9b 60a3 6823 [2021/9/28 18:34:42] PC call_normal-3: 18120582: 0000 e92d 47f0 688e 429e 4682 [2021/9/28 18:34:42] PC call_normal-4: 1811ad2c: 47c0 3001 d0aa 6823 079b d413 [2021/9/28 18:34:42] PC call_normal-5: 18120582: 0000 e92d 47f0 688e 429e 4682 [2021/9/28 18:34:42] PC call_normal-6: 1811a4ac: 0020 6c68 004c 6665 4567 4746 [2021/9/28 18:34:42] PC call_normal-7: 101667d4: 7325 2500 3a73 6425 7325 2f00
|