一个vector的问题

笑容为你 2008-09-14 01:47:39
主程序中有一个方法

void GetSub(std::vector<tstring> &subs)
{
tstring str = "1";
subs.push_back(str);
str = "2";
subs.push_back(str);
str = "3";
subs.push_back(str);
}

dll中通过接口函数得到GetSub的地址,然后调用,结果出错。

LINK* m_Link;
PLUGIN_EXPORT int Load(LINK* link)
{
m_Link = link;
}

void OnInitDialog()
{
std::vector<tstring> &subs;
m_Link->GetSub(&subs);
.......
} //出错

看出错提示是subs Destroy失败,

为什么?如何解决?
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
笑容为你 2008-09-14
  • 打赏
  • 举报
回复
嗯,明白了

GetSub是在exe中分配内存的

由于在GetSub(exe)里重新分配了内存(push_back操作),但是回到dll里析构释放,所以出错。

参考
http://topic.csdn.net/u/20080627/10/8508d60f-08d6-4744-b20e-18ee667f3bfa.html?208716329
笑容为你 2008-09-14
  • 打赏
  • 举报
回复
不太明白您的意思
既然GetSub是在DLL堆中分配内存,subs又是在dll销毁,应该没问题啊???
zhoujianhei 2008-09-14
  • 打赏
  • 举报
回复
如果非得用vector进行跨模块调用,则需要自己写一个分配器替换vector默认的内存分配器。

zhoujianhei 2008-09-14
  • 打赏
  • 举报
回复
subs销毁时释放了DLL分配的内存。即
void GetSub(std::vector <tstring> &subs)
{
tstring str = "1";
subs.push_back(str);
str = "2";
subs.push_back(str);
str = "3";
subs.push_back(str);
}
是在DLL堆中分配内存。

笑容为你 2008-09-14
  • 打赏
  • 举报
回复
不好意思,发帖时打错了,哪两行是没有&的

void OnInitDialog()
{
std::vector <tstring> subs;
m_Link->GetSub(subs);
.......
} //出错
zhoujianhei 2008-09-14
  • 打赏
  • 举报
回复
std::vector <tstring> subs; // 去掉 &
m_Link->GetSub(subs); // 去掉 &

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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