// dll
void getName(std::string & s)
{
int num = 100;
s.insert(0,num,'a');
}
// main
string s;
getName(s);
getName做为lib没任何问题. 但做为dll会有问题.
因为在dll中插入100个a时,空间不够(我用的VC7缺省capacity 是15)会重新为string分配空间.
但这个空间是在dll的局部堆上的,和exe不是同一个.当exe退出时释放空间就出错了.因为堆的基地址是不同的.(debug 版有assert会报错,release不报错,但实际会memory leak).
我不想让程序因为编译的形式(lib or dll)而去改变逻辑,有什么好办法呢?
====================================
这是一个以前的帖子,没有得到很好的解答,我也遇到了同样的问题,希望高手帮忙。 我不希望得到 [不用std::string这样的类]这个解决办法。谢谢!在以前的帖子中有人说:可以在自己在dll里面再加一个释放的函数 。能说说怎样加这个函数吗?谢谢!
void getName(std::string & s)
{
int num = 100;
s.insert(0,num,'a');
}
// main
string s;
getName(s);
getName做为lib没任何问题. 但做为dll会有问题.
因为在dll中插入100个a时,空间不够(我用的VC7缺省capacity 是15)会重新为string分配空间.
但这个空间是在dll的局部堆上的,和exe不是同一个.当exe退出时释放空间就出错了.因为堆的基地址是不同的.(debug 版有assert会报错,release不报错,但实际会memory leak).
我不想让程序因为编译的形式(lib or dll)而去改变逻辑,有什么好办法呢?
====================================
这是一个以前的帖子,没有得到很好的解答,我也遇到了同样的问题,希望高手帮忙。 我不希望得到 [不用std::string这样的类]这个解决办法。谢谢!在以前的帖子中有人说:可以在自己在dll里面再加一个释放的函数 。能说说怎样加这个函数吗?谢谢!
void clear(std::string & s)
{
s.clear();
}