规范编程之变量的初始化

一个进程crash的问题,

ExceptionClass: Native (NE)
Exception Type: SIGSEGV

CurrentExecuting Process:
pid: 386, tid: 399
/system/bin/
Tyservice

Backtrace:
#00 pc 0000000000092894 /system/lib64/libc.so (ifree+88)
#01 pc 0000000000092de0 /system/lib64/libc.so (je_free+116)

 

程序的流程简化后就是这样的

 

#include

#include

 

int main()

{

        chara[3] = {0}, *line;

//      char*line;

printf("p = %p \n", line);

       free(line);

       return 0;

}

 

对没有初始化的变量line执行free操作,出现崩溃

 

编译后执行

p = 0x55eb14a34610

*** Error in `./test2': munmap_chunk(): invalidpointer: 0x000055eb14a34610 ***

======= Backtrace: =========

/lib/x86_64-linux-gnu/libc.so.6(+0x790cb)[0x7f05a74170cb]

/lib/x86_64-linux-gnu/libc.so.6(cfree+0x1f8)[0x7f05a7424f38]

./test2(+0x785)[0x55eb14a34785]

/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf1)[0x7f05a73be3f1]

./test2(+0x63a)[0x55eb14a3463a]

 

 

但是这样写却不会崩溃

int main()

{

      char*line;

printf("p = %p \n", line);

       free(line);

       return 0;

}

编译器对第一种写法没有作优化。

对于变量的初始化,还是需要规范的去进行初始化。不然在特定情况下会出现莫名其妙的bug。

你可能感兴趣的:(C/C++,Linux/Unix)