工作代码在添加新行时抛出异常。调试技巧?

问题描述 投票:0回答:1

我在一个专有的代码库上工作,所以我必须抽象这个。

我试图在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卸载而抛出异常?

  • 有没有可能是我输入新代码时,链接过程发生了变化?

我以前没有遇到过这样的问题,所以我真的不知道怎么调试。

有什么建议吗?

谢谢了。


解决了。我找到了我的未定义行为。

c++ debugging shared-libraries c++-cli managed-c++
1个回答
0
投票

我想你要的是这样的东西。

const DataType** myData;
GetData(&myData);
const void* strData = myData[0]->strData; 

因为在原来的代码中,你只是传递了一个指针的值 一个未初始化的指针,然后访问那个未初始化的值。

编辑:修正了第三行

© www.soinside.com 2019 - 2024. All rights reserved.