主程序中有一个方法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失败,为什么?如何解决?

解决方案 »

  1.   

    std::vector <tstring> subs;  // 去掉 &
            m_Link->GetSub(subs); // 去掉 &
      

  2.   

    不好意思,发帖时打错了,哪两行是没有&的void OnInitDialog() 

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

  3.   

    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堆中分配内存。
      

  4.   

    如果非得用vector进行跨模块调用,则需要自己写一个分配器替换vector默认的内存分配器。
      

  5.   

    不太明白您的意思
    既然GetSub是在DLL堆中分配内存,subs又是在dll销毁,应该没问题啊???
      

  6.   

    嗯,明白了GetSub是在exe中分配内存的由于在GetSub(exe)里重新分配了内存(push_back操作),但是回到dll里析构释放,所以出错。参考
    http://topic.csdn.net/u/20080627/10/8508d60f-08d6-4744-b20e-18ee667f3bfa.html?208716329