嵌入式常见的段错误死机原因之一strlen函数
Posted 太阳德生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式常见的段错误死机原因之一strlen函数相关的知识,希望对你有一定的参考价值。
在做嵌入式产品常见死机原因有很多种,其中之一就是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
以上是关于嵌入式常见的段错误死机原因之一strlen函数的主要内容,如果未能解决你的问题,请参考以下文章