• 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预留足够的空间作为静态存储使用。

  • 相关阅读:
    kubeadm快捷k8s集群
    常用my.cnf
    cka考试 列出命名空间下指定标签pod
    mysql 巡检项
    1、什么原因可能导致主从同步延时,怎么判断,怎么处理?
    Linux运维常用操作培训用例
    RMAN 还原与恢复
    常见网络故障及其维修方法
    Oracle ORA01654 解决方案
    Oracle中 dba_* 和 v$* 表区别
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2478788.html
Copyright © 2020-2023  润新知