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