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

  • 相关阅读:
    .NET LINQ 数据分区
    .NET LINQ 投影运算
    .NET LINQ 限定符操作
    .NET LINQ 筛选数据
    freeswitch媒体处理方式
    freeseitch设置通道增益
    鼎信设备设置通道增益,提高音量
    freeswitch 录音
    freeswitch录音设置(不设置缓存)
    freswitch 设置sip中的callid作为用到的uuid
  • 原文地址:https://www.cnblogs.com/rollenholt/p/2478788.html
Copyright © 2011-2022 走看看