2015-10-05 36 views
0

我不知道为什么我的程序停止迭代4298迭代。当程序包含100个物品或类似物品时,该程序会执行它应该做的事情。为什么程序在C++执行完成之前停止迭代?

this->getList()包含5000个项目。我的压力测试我的程序

这是导致问题的功能:

map<Coordinate, map<Coordinate, double>> NearestPoints::allDistances() { 

map<Coordinate, map<Coordinate, double>> result = map<Coordinate, map<Coordinate, double>>(); 

int count = 0; 

list<Coordinate> list1 = this->getList(); 

for (list<Coordinate>::iterator iterator1 = list1.begin(), end = list1.end(); iterator1 != end; iterator1++) 
{ 

    cout << ++count << endl; 

    Coordinate coordinate1 = *iterator1; 

    result.insert(make_pair(coordinate1,map<Coordinate,double>())); 

    list<Coordinate> list2 = this->getList(); 

    list2.remove(coordinate1); 

    for (list<Coordinate>::iterator iterator2 = list2.begin(), internalEnd = list2.end(); iterator2 != internalEnd; iterator2++) 
    { 
     Coordinate coordinate2 = *iterator2; 

     /* 
     if (result.find(coordinate2) != result.end()) 
     { 
      result.at(coordinate1).insert(make_pair(coordinate2, result.at(coordinate2).at(coordinate1))); 

     } 
     */ 

     //else 
     //{ 
      result.at(coordinate1).insert(make_pair(coordinate2, this->distanceBetweenTwoPoints(coordinate1.getX(),coordinate1.getY(),coordinate2.getX(),coordinate2.getY()))); 
     //} 
    } 
} 
return result; 

}

+0

什么停止迭代的意思??坠毁,挂? – basav

+0

不,它没有坠毁。在4298迭代之后,即使主还没有完全执行,它也会打印“按任意键继续”。当列表包含100个坐标时,我工作正常。 –

+0

'Coordinate'的大小是多少? –

回答

2

您的内存不足。列表中有5000个条目。您可以为这些条目的地图制作5000 * 5000地图条目或25M的地图。每个映射条目由键(Coordinate)的24个字节,值(双)的8个字节以及地图中左,右和父节点的几个指针组成。每个节点至少有44个字节,每个25M节点都有额外的内存分配开销。

+0

你是对的。无论如何,我可以扩大内存吗?我在Visual Studio 2015上运行它? –

+0

如果你在64位窗口上,将它编译为64位进程。否则,您将不得不重新考虑如何跟踪数据。 – 1201ProgramAlarm

+0

非常感谢。我在释放模式下运行它,它工作 –

0

在这一行

Coordinate coordinate1 = *iterator1; 

您的复印内容的迭代器指向你可能是指

Coordinate& coordinate1 = *iterator1; 

相同之处在于你的内部循环。你最终得到很多副本。

+0

我试过了,但没有奏效。感谢您的帮助,无论:) –

0

我终于解决了issue.Ran我在发布模式下的代码和它的工作完美

相关问题