• 【opencv】debug报错HEAP CORRUPTION DETECTED


    运行至第一句涉及矩阵运算的代码(如cv::multiply)时报错
    在这里插入图片描述

    HEAP CORRUPTION DETECTED: after Normal block (#45034) at 0x000001BDC586F0E0.
    CRT detected that the application wrote to memory after end of heap buffer.
    
    • 1
    • 2

    release下不会报错,只有debug下会报错

    版本:opencv 3.1.0 vc2013 x64

    不管是官方编译的版本还是自己编译的版本,都会报错。进一步的,在自己编译的版本下看调用堆栈
    在这里插入图片描述
    一层层往上找:
    std::allocator<>::deallocate,c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xmemory0
    std::vector<>::~vector,c:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\vector
    cv::ocl::selectOpenCLDevice,opencv\sources\modules\core\src\ocl.cpp
    在这里插入图片描述
    挂在了selectOpenCLDevice的返回时std::vector析构的地方,此处是找到tempStrDeviceType="gpu"类型的设备了,devices不为空,其类型为std::vector devices,其中struct _cl_device_id { int dummy; };
    看到源码里有一句注释Use clReleaseDevice to cleanup,是不是opencl的设备没有显式释放导致的?

    但把本机编译好的debug版本可执行文件放到另外一台机器上运行,一切正常,说明可能是跟机器相关。
    本机(出问题的机器)配置是win11 + i5 13500HX + RTX 4050 laptop,正常运行的机器配置是win10 + i7 9700 + GTX 1660Ti

    怀疑是opencv3.1.0的opencl代码太老旧在新设备上无法正常debug运行,是否是40系n卡的问题?(待验证)

  • 相关阅读:
    linux下离线安装k8s集群1.19.4附带nfs存储
    实验四、零比特插入《计算机网络》
    【资损】分布式系统并发互斥设计
    Qt4.8.4和Echarts5.3.3进行绘图
    vue3 watch 异步方法
    盈利背后,美团渴望第二曲线
    微前端是如何实现作用域隔离的?
    关于python序列对象
    2022李宏毅作业hw1—新冠阳性人员数量预测。
    Docker-harbor私有仓库部署与管理
  • 原文地址:https://blog.csdn.net/Kelvin_Yan/article/details/134520881