将指针作为参数分配给类变量,然后使用它抛出读取访问违规

Assigning pointer as argument to class variable and then using it throws read access violation

本文关键字:读取 访问 然后 指针 参数 分配 类变量      更新时间:2023-10-16

我不知道我给出的是足够的信息,但是因为我不知何故我想我可能会问。

我有类似的设置:

class A
{
public:
    SomeClass* someClass;
    A(SomeClass* someClass) : someClass(someClass) {}
    void DrawFunction()
    {
        someClass->DoSomething(); // <-- Read Access Violation
    }
}

出于某种原因,它会引发读取访问违规行为,据我所知,原始SomeClass仍然存在。我可以像在构造函数中一样使用它,但由于某种原因而不能在绘制功能中使用。

要注意的一件事是,DrawFunction在另一个线程中,但是在同一线程中,我在其他地方使用SomeClass

我的代码有什么问题,还是我需要提供更多代码才能查看它有什么问题?

也许是无公共的DoSomething方法?例如这样:

class Foo {
     void DoSomething(){}
protected:
     void DoOtherthing(){}
}

如果您将尝试访问foo类外的DoSomethingDoOtherthing,而从friend中则没有类似的错误。

您有资源争议。由多个线程访问的资源someClass。使用someClass(共享资源(等同步结构,例如mutexsemaphore等。