C++ Builder中动态数组与静态数组计数结果不一致问题求助
问题原因
核心问题是动态数组未初始化:
你使用静态数组时写了unsigned __int64 point_count[n] = {0};,这行代码会自动把数组所有元素初始化为0。但DynamicArray仅设置长度时,不会自动初始化元素,数组内的初始值是内存残留的随机垃圾值,后续累加计数是在垃圾值的基础上叠加,最终结果自然和静态数组不一致。
解决方法
设置完point_count的长度后,手动将所有元素初始化为0即可,两种常用实现方式:
- 循环初始化
DynamicArray<unsigned __int64> point_count; point_count.Length = n; // 手动初始化所有元素为0 for (int i = 0; i < n; i++) { point_count[i] = 0; }
- 内存清零函数批量处理
DynamicArray<unsigned __int64> point_count; point_count.Length = n; ZeroMemory(&point_count[0], sizeof(unsigned __int64) * n);
另外请确认DynamicArray<HRGN>类型的region数组的赋值逻辑和静态数组版本保持一致,不要遗漏每个元素调用CreatePolygonRgn的步骤。
内容的提问来源于stack exchange,提问作者Vorrven
相关产品推荐
相关产品推荐

