规范编程之变量的初始化

一个进程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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值