情景:程序加载dll,dll中的函数调用另一个dll中的导出函数.
string getName()
{
string name="";
regmatch(text,&name);
return name;
}
do
{
string m_name=getName();
}while(0);
当m_name析构的时候,发生异常
分析其中的原因,应该是name 的内存不够,为了保存name的结果,在regmatch函数调用中分配了新的内存,当getname调用完之后导致堆栈上的name销毁内存,但此时的内存是regmatch()导出函数分配的,故会出现异常。
如果改成如下函数
string getName()
{
string name(1024,0);//假设regmatch 取得的结果小于1024。
regmatch(text,&name);
return name;
}
则不会发生异常。