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

时间: 2024-08-03 17:50:54

VS调用dll出现内存错误的相关文章

Jna调用dll文件,怎么释放内存

问题描述 本人初次有Java调用dll,但是用jna调用dll,内存怎么处理Jna调用dll文件,怎么释放内存,最好有代码

freelibaray-DLL调用DLL,程序直行至FreeLibaray时提示内存错误

问题描述 DLL调用DLL,程序直行至FreeLibaray时提示内存错误 Debug Assertion Failed! Expression: _CrtIsValidHeapPointer(pUserData) 我在外层DLL中定义了一个全局变量,作为其调用的参数,当程序执行到FreeLibaray时死锁,但是调用的函数已经执行完毕!不知如何处理,请各位大虾指点!

C#调用C++出现尝试读取写入保护的内存错误

问题描述 代码如下,问题如题:在运行到最后一句的时候出现了尝试读取写入保护的内存错误,该句调用的是外部API,不知道怎么解决,改程序功能是大华网络摄像头的. 解决方案 解决方案二:这一般是由于参数类型不匹配造成的NET_TIME是啥类型,DLL里认识这个类型?解决方案三:你应该先看DLL里的函数到底是啥类型的参数不管是啥类型,你也不该把C#里定义的类当做类型传进去,它能认识才怪除非这个DLL本身就是C#编写的,那它顶多认识.net类库里的类型,你自定义类型它保证不认识解决方案四:引用2楼Z654

net-iis下调用外部程序出现内存不足错误。

问题描述 iis下调用外部程序出现内存不足错误. 因为需要在服务器端将ppt转换成其他格式,所以在iis下调用了编好的python. 在非服务器的环境下是可以正常使用的,但是iis下使用 using System.Diagnostics; Process p = new Process(); ... ... 的方式调用python脚本,执行到 python文件的: import win32com from win32com.client import Dispatch, constants pp

vb.net调用MATLAB通过com组件生成的dll时的错误

问题描述 我通过MATLAB生成了dll,并在vs2008里进行了调用,一开始是可以用的,后来弹出来一个错误是:服务器出现意外情况.(异常来自HRESULT:0x80010105(RPC_E_SERVERFAULT))我把程序关了再打开有时候可以用,有时候还是弹出这句话.检查代码就是执行到调用dll函数的位置出的错误.但是不知道为何有时候不会出错有时候会出错,希望各位大神给予解答.异常详细信息:System.Runtime.InteropServices.COMException:服务器出现意外

python中使用rpy2调用R出现DLL加载错误,不是有效win32位程序

问题描述 python中使用rpy2调用R出现DLL加载错误,不是有效win32位程序 win7 64位系统 R和python都是32位 解决方案 这个dll的依赖是否有问题 用depends查看一下 解决方案二:

dll结构体-C#调用DLL结构体,第一次成功,第二次的时候就报错。尝试读取或写入受保护的内存。

问题描述 C#调用DLL结构体,第一次成功,第二次的时候就报错.尝试读取或写入受保护的内存. C++代码 typedef struct tagIDCardData{ char Name[32]; //姓名 char Sex[6]; //性别 char Nation[20]; //名族 char Born[18]; //出生日期 char Address[72]; //住址 char IDCardNo[38]; //身份证号 char GrantDept[32]; //发证机关 char User

关于c#动态调用非托管DLL的内存释放问题

问题描述 本人由于客户的需要,需要在程序的运行过程中,动态加载不同的DLL.这与直接调用非托管DLL不一样.下面这个帖子中的第三个方法很好的说明了如何动态调用非托管DLL.http://blog.csdn.net/pansiom/article/details/568096#comments为了方便使用,我把文中的方法弄成了一个DLDApi类,如下usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Re

C#程序实现动态调用DLL的研究

原文:C#程序实现动态调用DLL的研究 C#程序实现动态调用DLL的研究 摘  要:在<csdn开发高手>2004年第03期中的<化功大法--将DLL嵌入EXE>一文,介绍了如何把一个动态链接库作为一个资源嵌入到可执行文件,在可执行文件运行时,自动从资源中释放出来,通过静态加载延迟实现DLL函数的动态加载,程序退出后实现临时文件的自动删除,从而为解决"DLL Hell"提供了一种解决方案.这是一个很好的设计思想,而且该作者也用C++实现了,在Internet上也