qq_41747698 2021-10-11 16:20 采纳率: 75%
浏览 84
已结题

opencv静态库链接至dll时,内存越界,如何解决?

百度结果如下:
运行库的链接可能会导致内存越界
msvcrt.lib,可能会导致内存越界,因为动态链接的库和静态链接的库可能会重载了new运算符,导致了不同的堆存在,可能会在一个堆上申请的空间在另一个堆上释放!
这里有两点需要注意:
尽量不要混合静态链接和动态链接,因为他们会申请不同的堆。
注意任何编译的警告,[warning LNK4098: 默认库“msvcrtd.lib”与其他库的使用冲突;请使用 /NODEFAULTLIB:library]

原因:
为了只使用一个dll生成时链接了静态库,
创建了一个ocr类,比如写一个函数void readimg(){imshow(“path”);}也会直接报错,
会直接导致如下报错:

报错:
cmake+vs2015编译opencv后链接opencv静态库至dll,生成一个ocr类实现识别数字功能,但是仅仅实例化ocr之后,return后花括号}会报内存越界:注:没有用到任何memloc new之类的分配,全部为opencv自动管理
debug下:
Run-Time Check Failure #2 - Stack around the variable 'read' was corrupted.
release下:
Unhandled exception at 0x002012B8 in testdll_1.exe: Stack cookie instrumentation code detected a stack-based buffer overrun.

跳转至:
#elif defined _M_IX86 || defined _M_X64

__declspec(noreturn) void __cdecl __report_gsfailure(GSFAILURE_PARAMETER)
{
    if (IsProcessorFeaturePresent(PF_FASTFAIL_AVAILABLE))
    {
        __fastfail(FAST_FAIL_STACK_COOKIE_CHECK_FAILURE);
    }
  • 写回答

2条回答 默认 最新

  • 胸毛男 2021-10-11 18:32
    关注

    stack 什么什么的 我遇到通常是x64的平台调用了x86的dll
    或者反过来 看看两者设置呀

    评论

报告相同问题?

问题事件

  • 系统已结题 10月19日
  • 创建了问题 10月11日

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧