gpt4 book ai didi

C++ 迭代器/vector 在发布版本中不起作用

转载 作者:行者123 更新时间:2023-11-30 01:19:03 24 4
gpt4 key购买 nike

我正在使用 vector/迭代器在不同的类中执行一个方法,这在调试和我们使用相同方法的其他地方工作得很好。但是由于某种原因,当我在发行版中运行此代码时,出现以下错误:

FOO.exe 中 0x011d2928 处的未处理异常:0xC0000005:访问冲突。

std::vector<AbstractClass*> vectorClasses;
vectorClasses.push_back(&SomeClass1());
vectorClasses.push_back(&SomeClass2());
vectorClasses.push_back(&SomeClass3());

CString result;
std::vector<AbstractClass*>::iterator it

for(it = vectorClasses.begin() ; it != vectorClasses.end() ; it++)
{
result = (*it)->DoSomething(s1, s2);
if(!IsBlank(result))
{
//Do something
break;
}
}

为什么会这样?错误与使用 vector/迭代器有关吗?让我想到它与迭代器有关的是,当我调试它(​​发布)时,visual studio 完全跳过我声明迭代器的行(这在调试中不会发生)。

当我调试发布版本时,我在尝试执行该行时遇到错误:

result = (*it)->DoSomething(s1, s2);

最佳答案

您不能保留临时对象的指针。内存将被重用,所以你有无效的内存访问

std::vector<AbstractClass*> vectorClasses;
vectorClasses.push_back(&SomeClass1()); // ill formed, SomeClass1() is create on the stack and destroy after push_back call is done, referencing the pointer after that is invalid as it will not be a SomeClass1 anymore.

因为你需要多态性,你应该这样做,智能指针必须优先于裸指针。

std::vector<std::unique_ptr<AbstractClass>> vectorClasses;
vectorClasses.push_back( std::make_unique<SomeClass1>() );
vectorClasses.push_back( std::make_unique<SomeClass2>() );
vectorClasses.push_back( std::unique_ptr<SomeClass3>( new SomeClass3{} ) ); // if make_unique not available

关于C++ 迭代器/vector 在发布版本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21577286/

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