我在一个专有的代码库上工作,所以我必须抽象这个。
我试图在MyApplication中设置DataType_T*** myData的值。我正在使用一个共享的c++库(我把它称为库A)来设置这个值。这个共享的c++库只是一个简单的C API的封装类,C API作为一个共享库被包含在库A中(我把它称为库B)。
所以MyApplication在A中调用GetData(myData),而A中调用B中的GetData(myData)。
MyApplication有如下代码。
void OnButtonPress(){
const DataType*** myData;
GetData(myData);
DataTypeVal1 val1 = (*myData)[0]->val1; // just grabbing some info.
}
GetData(myData):工作,并正确设置myData。
我:输入一些新的代码
void OnButtonPress(){
const DataType*** myData;
GetData(myData);
const void* strData = (*myData)[0]->strData; // just grabbing some info now that we have the pointer.
//Add lots more new code that does this over and over for each member of myData
String^ str = gcnew String(static_cast<const char*>(strData));
}
GetData(myData):抛出一个写访问违规。
我:"............什么"。
会不会因为某种dll卸载而抛出异常?
有没有可能是我输入新代码时,链接过程发生了变化?
我以前没有遇到过这样的问题,所以我真的不知道怎么调试。
有什么建议吗?
谢谢了。
解决了。我找到了我的未定义行为。
我想你要的是这样的东西。
const DataType** myData;
GetData(&myData);
const void* strData = myData[0]->strData;
因为在原来的代码中,你只是传递了一个指针的值 一个未初始化的指针,然后访问那个未初始化的值。
编辑:修正了第三行