gpt4 book ai didi

c++ - xcode 4 中的赋值运算符崩溃,在 MSVS2010 中运行良好

转载 作者:行者123 更新时间:2023-11-28 08:08:27 26 4
gpt4 key购买 nike

我正在使用 visual studio 2010 开发一个 C++ 项目,一切都很好,但是当我尝试使用 xcode 4 运行我的程序时,它引发了 Bas_Access 异常。我认为这是因为内存泄漏,但我不确定如何解决该问题。我有以下功能:

// Search is my class with x and y as members and here's is a constructor
// that I cretae in my Search.cpp class
Search& Search::operator=( const Search& search )
{
if(this != &search)
{
x = search.x;
y = search.y;
}
return *this;
}

下面是我的函数的调用方式:

Search searchStart(0,0);
//I created my tempSearch and initialized it with the start Search element
Search tempSearch(searchStart);
//bestSolution is a function that calculates the best neighbour node around the searchStart node, it returns a Search element. And stores it in a list in storage.
Search * tempCurrent=searchStart.bestSolution(&storage);
//Here I call my function
tempSearch=*tempCurrent;

我只是从现有元素创建一个新的搜索元素,但它给了我异常

x=search.x;

它与 visual studio 完美配合。

编辑:我刚刚添加了调用我的函数的代码。很抱歉不能提供完整的代码,因为它真的很长。

编辑:这是我最好的解决方案功能:

Search * searchNode::Search::bestSolution(Storage *storage )
{
//listResult is a type defined as std::list<Search *> listResult.
listResult::iterator it, it1;
listResult tempList;
//I've initialized the result element at (0,0) because it was creating problems
// if uninitialized
Search *result=new Search(0,0);
//openList is a simple list of Search elements
if(!storage->openList.empty()){
for(it=storage->openList.begin();it!=storage->openList.end();it++)
{
tempList.push_back((*it));
}
tempList.reverse();
it1=tempList.begin();
// getDistanceCost is a function that calculates the heuristic distance
// between two points and works fine
int fCost=(*it1)->getDistanceCost();
for(it1=storage->openList.begin();it1!=storage->openList.end();it1++)
{
if((*it1)->getDistanceCost()<=fCost){
fCost=(*it1)->getDistanceCost();
result=(*it1);
}
}

}

return result;
}

最佳答案

我的猜测是 bestSolution 正在返回指向分配在堆栈上的对象的指针。现在,当您尝试 tempSearch=*tempCurrent 时,您正试图将值复制到这个导致未定义行为的无效指针中。

编辑

查看 bestSolution 方法的实现,我假设 listResult 包含 Search* 作为其节点,因为您正在执行 result =(*it1);。看起来列表具有指针的 Search 对象在插入列表后被删除。所以你在列表中拥有的是一个无效指针。如果您尝试将任何内容复制到此无效指针所指向的内存中,您的程序将出现不可预知的行为。

关于c++ - xcode 4 中的赋值运算符崩溃,在 MSVS2010 中运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9699498/

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