gpt4 book ai didi

c++ STL vector 导致内存溢出?

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

我正在广泛使用 STL vector 来管理大型数据数组的内存(去)分配。特别是,我从大量角度(180 度,每步 2 度)生成解剖结构的透视投影,处理和分析结果。结果用于定义放射治疗的辐射场。

似乎如果数组超过一定大小(>3 个解剖结构),内存就会溢出。具体报错如下

在抛出“std::out_of_range”实例后调用终止 what(): vector::_M_range_check

这是使用 at 的结果,它执行边界检查,而不是更快的 [] 运算符。如果我有 <=3 个结构,则不会发生错误。

我已将错误追踪到以下代码块

bool dicomCP::assignBeamlet(int beamletNumber, Beamlet &b1)
{
//std::cout << "\nInside dicomCP::assignBeamlet (int, Beamlet &)\n";

if (!this->isSet)
{
this->beamlets.at(beamletNumber).setLeftRight(b1.left,b1.right);

this->isSet=true;

return true;


}

else if (!this->beamlets.at(beamletNumber-1).isOpen())
{

return false;

}

// left (outside) min(left) and right (outside) max(right) leaves
else if ((this->beamlets.at(beamletNumber-1).right-b1.left >EPSILON2)&&(b1.right-this->beamlets.at(beamletNumber-1).left>EPSILON2))
{

if (this->beamlets.at(beamletNumber).open) return false;

else if (!this->beamlets.at(beamletNumber).open)
{
this->beamlets.at(beamletNumber).setLeftRight(b1.left,b1.right);
this->beamlets.at(beamletNumber).isAssigned=true;



this->isSet=true;
return true;
}
}

else return false;

}

注意如果“this->isSet=true;”行被注释掉,无论结构的数量如何,错误都不会出现:是的,它适用于 6! “isSet” bool 值用于确定哪些对象已设置,因此哪些对象需要写入数据文件以供进一步处理。

系统和软件:

gcc (SUSE Linux) 4.4.1 [gcc-4_4-branch 修订版 150839]SuSE 11.2 64 位Intel Celsius 配备 4 个 Xeon 2.66GHz CPU 和 4GB RAMEclipse CDT (IDE) 64 位版本 20100218-1602

最佳答案

显然,您正在访问容器外部的元素。从这段代码中无法判断索引是否正确,在调试器中浏览这段代码,您就会看到。看起来可疑的部分:this->beamlets.at(beamletNumber-1).isOpen() 如果 beamletNumber 为 0 怎么办?你得到无效的索引。

关于c++ STL vector 导致内存溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4491490/

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