zoukankan      html  css  js  c++  java
  • VS调用dll出现内存错误

    问题地址:http://q.cnblogs.com/q/34732/

    描述:

    出现了内存错误,向dll里传递了一个vector,dll向vector放了一点数据,程序退出的时候有内存错误。

    解答:

    vector的本质就是一个变长数组,数据存储是在堆上的,在dll中存入数据,很可能就是在dll中申请的存储,在主程序里面释放的存储。如果你的程序采用静态链接的方式,每一个可执行模块都会创建自己的CRT堆,在模块内部进行new和delete操作的时候,是在CRT堆上进行的,这样不会出错,但是如果在dll模块中申请存储,但是在主程序模块释放存储,vector不知道如何正确释放dll中分配的内存或者释放存储的行为是错误的。

    可以修改链接方式为动态连接,也就是DLL CRT的方式,这种方式下CRT堆只会创建一份,也就是主可行性模块加载的时候创建的那一份,在同一个模块申请释放存储不会出错,或者采用静态链接的方式,不要在主程序和dll之间传递vector,或者先给vector预留足够的空间作为静态存储使用。

  • 相关阅读:
    理清一下JavaScript面向对象思路
    IE的CSS渲染跟其它浏览器有什么不同
    页面元素的CSS渲染优先级
    push与createElement性能比较
    关于JavaScript的push()函数
    关于JavaScript的沙箱模式
    JavaScript SandBox沙箱设计模式
    用live()方法给新增节点绑定事件
    深入JavaScript对象创建的细节
    Keras class_weight和sample_weight用法
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2478788.html
Copyright © 2011-2022 走看看