精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
软件关闭时出崩溃问题,定位到下面的第8行fls_get_value行:
extern "C" PVOID WINAPI __acrt_FlsGetValue(DWORD const fls_index) { #if FLS_ALWAYS_AVAILABLE return FlsGetValue(fls_index); #else if (auto const fls_get_value = try_get_FlsGetValue()) { return fls_get_value(fls_index); } return TlsGetValue(fls_index); #endif }
这函数在winapi_thunks.cpp里,FlsGetValue是获取存储信息,纤程相关的。这函数的上级调用函数也看不到,所以觉得奇怪。因为软件一直正常,所以很奇怪,还想着是操作系统有问题,VS编译有问题,把机器杀毒,VS的一些插件也卸载了,处理下环境问题。后来从环境角度转到代码角度,耐心查了查问题解决了。
memset越界造成,同时让对象属性成员值突然变化,因为越界写入,写到了对象内存范围里,所以对象释放内存时就出崩溃问题。memset的最后长度参数不要写死,要用内存实际长度sizeof,这样能避免越界问题。
具体哪行的memset,并不好找,如果大家遇到相同的问题,请找锐英源软件。