Windows端向Android移植的时候,Android端一直异常退出,但Windows端运行的很正常。在调试代码的时候发现了
图片和下面提示
F libc: stack corruption detected (-fstack-protector)
F libc: Fatal signal 6 (SIGABRT), code -6 in tid 8741 (QtThread), pid 8646 (mple.interface_)
我开始对我的代码进行排查,我发现没有数组越界等问题。最后才发现是sprintf出现了问题,由于sprintf对写入的buf的字符数是没有限值的,这样可能导致buf溢出。
解决方法:
1、buf尽可能的定义大一点
2、使用snprintf,对字符进行限制。
函数原型:int snprintf(char *str, size_t size, const char *format, …)
但是这样为什么在Windows端没有影响,我使用Visual Studio写了个小例子,发现程序提示的堆溢出,但是还是运行下去了。没有使程序崩溃,可能是因为Windows端没有像Linux那样会发射信号,使程序结束。