1. 程式人生 > >規範程式設計之變數的初始化

規範程式設計之變數的初始化

一個程序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 <stdlib.h>

#include <stdio.h>

 

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。