vector 与 dll

liqianhong 2008-01-25 01:49:58
我做的项目包含许多小的dll,
现在有这样的情况
a dll 建立一个 vector<SomeClass> *p=new vector<SomeClass>;

MYTest test.
test.pushtest(p);
delete p;//这里会异常


b dll里往这个p里加东西
pushtest(vector<SOMECLAss> *p)
{
SomeClass *c =new SomeClass();//构造函数没什么处理。不会改变内存的
p->push_back(*c); //如果全改成push指针,也会在vector 被delete时出错
}

现在的问题是

vs2005下,在A delete出现异常,读取元素数据没任何问题
vs2002下,都没问题
vs2005下,b如果是静态库,也没问题
vs2005下,自己建一个测试动态库的测试程序(全部是单独的程序 ,也没问题

这是怎么回事啊

...全文
157 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
liqianhong 2008-02-05
  • 打赏
  • 举报
回复
自己已经搞定了
,原来那个库用了不同的编译选项,_DEBUG,全部去掉后,那个特定lib无视也去掉
问题解决。编译选项不一样时,使用的运行库也不一样。
测试程序全部是一样的、所以没问题
txk1452 2008-01-26
  • 打赏
  • 举报
回复
SomeClass *c =new SomeClass();//构造函数没什么处理。不会改变内存的
p-> push_back(*c); //如果全改成push指针,也会在vector 被delete时出错

这时c应该就可以delete了

===============================================================================
a dll 建立一个 vector <SomeClass> *p=new vector <SomeClass> ;

MYTest test.
test.pushtest(p);
p->resize(0); //这里加上这句看一下,delete之前先释放容器里的内容
delete p;//这里会异常

tccqs 2008-01-25
  • 打赏
  • 举报
回复
深切关注中,,,
liqianhong 2008-01-25
  • 打赏
  • 举报
回复
vs2002没有这种问题
vs2005下,自己建一个测试动态库的测试程序(全部是单独的程序),也没问题
也是一个分配,另一个释放

而且在开发环境中,调用clear 也会出错

  • 打赏
  • 举报
回复
运行库分配内存的问题
你要保证在dll中分配的内存必须在dll中释放.
exe中分配的内存必须在exe中释放.
真要传递一个指针到另外的模块释放的话,使用api来分配释放内存.

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧