gpt4 book ai didi

c++ - 使用结构成员创建映射会抛出 bad_alloc

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:44 25 4
gpt4 key购买 nike

所以我有一个结构

struct float3
{
float x, y, z;
};

我正在尝试创建一个函数来获取 x、y、z 值并将它们映射到键 0、1、2 以对应其各自的维度。我写了下面的代码,但它抛出了一个错误的 alloc_exception。看来我的内存用完了。

KdTree::float2map(std::vector<float3>& data)
{
std::vector<std::map<int, float> > m_pnts;
int cnt = 0;
for(int i = 0; i = data.size(); i++)
{
std::map<int, float> tmp;
tmp.insert(std::make_pair(0, data[i].x));
tmp.insert(std::make_pair(1, data[i].y));
tmp.insert(std::make_pair(2, data[i].z));

m_pnts.push_back(tmp);
std::cout << m_pnts.size() << std::endl;
}

}

return m_pnts;
}

我对 C++ 还是很陌生,所以我确信还有很多其他方法可以做到这一点或优化这种方法。问题是我必须做这个 33,914,095 float3s 而我想不出另一种方法来实现这个。任何帮助将不胜感激。

最佳答案

看看这行代码:

for(int i = 0; i = data.size(); i++)

您在 for 语句的条件中将 i 设置为 data.size()。这将导致越界访问,因为 data.size() 将成为 data vector 的索引,其元素的索引从 0data.size() - 1

那可能不是您的本意。在 for 循环中使用适当的条件。应该是:

for(int i = 0; i < data.size(); i++)

或者更好的是,使用 range-based for loop这有助于避免此类错误:

for(const auto& ele: data)
{
std::map<int, float> tmp;
tmp.insert(std::make_pair(0, ele.x));
tmp.insert(std::make_pair(1, ele.y));
tmp.insert(std::make_pair(2, ele.z));
m_pnts.push_back(tmp);
std::cout << m_pnts.size() << std::endl;
}

关于c++ - 使用结构成员创建映射会抛出 bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54683192/

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