添加新行时工作代码抛出异常。调试技巧?
Working code throwing exception when new lines added. Debugging tips?
我正在开发专有代码库,所以我必须对此进行抽象。
我正在尝试在 MyApplication 中设置 DataType_T*** myData 的值。我正在使用共享的 C++ 库(我表示库 A)来设置值。共享 C++ 库只是 C API.The 周围的简单包装器 class C API 作为共享库包含在库 A 中(我表示库 B)。
所以 MyApplication 在 A 中调用 GetData(myData),在 B 中调用 GetData(myData)。
MyApplication 具有以下代码:
void OnButtonPress(){
const DataType*** myData;
GetData(myData);
DataTypeVal1 val1 = (*myData)[0]->val1; // just grabbing some info.
}
GetData(myData): works, and properly sets myData.
Me: types some new code
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): throws a write access violation.
Me: ". . . . . . .what."
会不会因为某种 dll 卸载而抛出异常?
当我输入新代码时,链接过程是否有可能发生变化?
我以前没有遇到过这样的问题,所以我真的不知道如何调试。
有建议吗?
谢谢。
已解决。
我发现了我未定义的行为。
我想你想要这样的东西:
const DataType** myData;
GetData(&myData);
const void* strData = myData[0]->strData;
因为在原始代码中你只是按值传递一个指针;一个未初始化的指针,然后访问相同的未初始化值。
ed: 修复了第三行
我正在开发专有代码库,所以我必须对此进行抽象。
我正在尝试在 MyApplication 中设置 DataType_T*** myData 的值。我正在使用共享的 C++ 库(我表示库 A)来设置值。共享 C++ 库只是 C API.The 周围的简单包装器 class C API 作为共享库包含在库 A 中(我表示库 B)。
所以 MyApplication 在 A 中调用 GetData(myData),在 B 中调用 GetData(myData)。
MyApplication 具有以下代码:
void OnButtonPress(){
const DataType*** myData;
GetData(myData);
DataTypeVal1 val1 = (*myData)[0]->val1; // just grabbing some info.
}
GetData(myData): works, and properly sets myData.
Me: types some new code
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): throws a write access violation.
Me: ". . . . . . .what."
会不会因为某种 dll 卸载而抛出异常?
当我输入新代码时,链接过程是否有可能发生变化?
我以前没有遇到过这样的问题,所以我真的不知道如何调试。
有建议吗?
谢谢。
已解决。 我发现了我未定义的行为。
我想你想要这样的东西:
const DataType** myData;
GetData(&myData);
const void* strData = myData[0]->strData;
因为在原始代码中你只是按值传递一个指针;一个未初始化的指针,然后访问相同的未初始化值。
ed: 修复了第三行