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那样会发射信号,使程序结束。
本文讲述了在将Windows应用程序移植到Android平台时遇到的程序异常退出问题。通过排查发现是由sprintf函数未限定写入长度导致缓冲区溢出引起。文章提供了两种解决方案:增大缓冲区大小和使用snprintf函数。
842

被折叠的 条评论
为什么被折叠?



