gpt4 book ai didi

c++ - 列出迭代器访问冲突

转载 作者:行者123 更新时间:2023-11-28 01:06:29 25 4
gpt4 key购买 nike

我有一个 list 指针指向 Main 类中的 SomeClass 对象。在 Main 中,我可以使用 list::begin()list::end() 遍历 list >.

当我对 SomeClass 的实例执行相同操作时(请记住 listMain 类的公共(public)成员)我得到以下异常:

0xC0000005: Access violation reading location 0xbaadf0ad.

我是 Python 背景下的 C++ 编码新手,所以如果有什么不明白的地方,我深表歉意。

这是一个例子:

编辑: Main 类代码实际上并不在构造函数中,它在名为 InitialiseObjects() 的方法中。

编辑:异常来自 list::being() 方法中的 return (iterator(_Nextnode(_Myhead), this)) ;

#include <list>
using namespace std;

class Main
{
public:
Main::InitialiseObjects()
{
// Execution starts here
SomeClass someClass = new SomClass(this);
someClasses.push_back(someClass);

// This works fine
for (list<SomeClass*>::iterator it = someClasses.begin(); it != someClasses.end(); it++)
...

someClass->AFunction();
}
list<SomeClass*> someClasses;
}

class SomeClass
{
public:
SomeClass::SomeClass(Main *main) : main(main) {}
void SomeClass::AFunction()
{
// This will not work throwing the aformentioned error
for (list<SomeClass*>::iterator it = main->someClasses.begin(); it != main->someClasses.end(); it++)
...
}
private:
Main *main;
}

最佳答案

0xC0000005: Access violation reading location 0xbaadf0ad.

我认为那是 0xbaadf00d,直到您覆盖了其中的某些内容,这表明未初始化的堆内存。那么,也许您正在取消引用一个不存在的 Main*?例如。如果 main 尚未初始化,main->someClasses.begin() 可能会抛出异常。
事实上,这就是您的代码中的问题。 someClass->AFunction();Main-constructor 中调用函数。因此,this 还不是完全有效的,因此您不能在 AFunction 中使用它。

关于c++ - 列出迭代器访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5803150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com