当我尝试在下面的代码中调用 SetName() 时,我的应用程序崩溃了。
主文件
using namespace std;
int main()
{
Schema * schemaExp = new Schema();
//Application is getting crash when calling this function
schemaExp -> SetName("ExpSchema");
string srctable;
srctable=schemaExp->GetName();
cout <<"\nConnection EXPORT using the target table:" << srctable.c_str() << endl;
delete schemaExp;
return 0;
}
模式类定义:
using namespace std;
class Schema
{
public:
TELAPI_EXPORT void SetName(string name);
TELAPI_EXPORT string GetName();
protected:
string tableName;
};
void Schema::SetName(string name){ tableName = name; }
string Schema::GetName()
{
return tableName;
}
我正在使用 MSVS 9 (VS 2008)。我的应用程序以及共享库(dll)(我用来链接我的应用程序)也是 c++ 环境。现在观察以下情况:
1.当共享库/dll以Debug模式构建并且我的应用程序也以Debug模式构建时结果:应用程序执行成功
2.当共享库/dll以Release模式构建并且我的应用程序也以Release模式构建时结果:应用程序执行成功
3.当共享库/dll 在发布模式下构建并且我的应用程序在调试模式下构建时结果:应用程序抛出带有以下中断语句的崩溃报告。
multiple.exe 中 0x1003f3a5 处的未处理异常:0xC0000005:访问冲突读取位置 0x00134000。
注意:上面的代码只是我的应用程序的一部分。架构类定义来自共享库和我的应用程序中的 main.cpp。此外,这个问题似乎只在 Windows 上失败,unix 版本运行良好。
更重要的一件事,如果我在 main.cpp 中注释掉schemaExp -> SetName("ExpSchema");
,应用程序在上述三种情况下通过,我的意思是发布和调试构建的任意组合
在我的原始应用程序的整个代码中(上面的代码是其中的一部分),只有上面的函数调用困扰着我
我猜在使用字符串作为函数调用的参数时出了点问题,但还要注意当我编写实现上述场景的示例程序(未链接到共享库/dll)时,我的应用程序运行良好
彻底击中这里。仅在 #3 情况下,也无法预测发生了什么问题以及导致访问冲突的原因。
请帮我解决这个问题。非常感谢任何形式的帮助。
提前致谢。