gpt4 book ai didi

c++ - Main 返回后出现 Segmentation Fault 11

转载 作者:太空狗 更新时间:2023-10-29 23:06:46 49 4
gpt4 key购买 nike

我有一个包含多个类的很长的程序,所以除非您需要,否则我不会发布它。但是在 main 返回之后我得到了一个段错误。

使用 GDB 我可以看到这个错误:

program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000002300103be8
0x00000001000035cc in std::_Rb_tree<std::string, std::string, std::_Identity, std::less, std::allocator >::_S_right (__x=0x2300103bd0) at stl_tree.h:512
512 { return static_cast<_Link_type>(__x->_M_right); }

我是 C++ 的新手,所以这对我来说就像是胡言乱语。任何人都可以破译它吗?看起来问题可能是我的一个 STL 容器引起的?关于如何修复它有什么建议吗?

使用代码编辑:

好的,所以我将它隔离到 main 的 if block 中的某个地方,这是我写的最后一件事,当我将其注释掉时,程序运行正常。

else if(line.substr(0, 3) == "Rec") // Recieve 
{
istringstream ss(line);
string s; // output string
string upc;
string name;
int amount;
int count = 0;
while(ss >> s) // go through the words in the line
{
count++;
if(count == 2)
upc = s;
else if (count == 3)
{
istringstream isa(line.substr(20, 2));
isa >> amount; //Parse the amount
}
else if (count == 4)
name = s;
}


warehouses.find(name)->second.receive_food(upc, amount); //add the food to the warehouse

}

澄清line我们正在查看的是这种格式:

Receive: 0984523912 7 Tacoma

warehouses是一张 map :map<string, a4::warehouse> warehouses; //all the warehouses.

这里是仓库接收方法

void warehouse::receive_food(std::string upc, int amount)
{
items.find(upc)->second.receive(amount);

todays_transactions = todays_transactions + amount;
}

在哪里itemsstd::map<std::string, food> items;

最后是 Food Receive 方法

void food::receive(int amount)
{
crates.push_back(crate(life, amount));
}

在哪里cratesstd::list<crate> crates;

还有一个 crate

    class crate
{
public:
crate(int, int);
~crate();
int life;
int quantity;
};

最佳答案

看起来像是内存损坏。 _Rb_tree 表明该错误与 std::map 有关,通常实现为 red-black tree .不看代码就不好说了。我建议使用 Valgrind调试问题。

查看您在更新中发布的代码后,我认为问题在于您没有检查 warehouses.find(name) 是否返回有效的迭代器。如果找不到 key ,它可以返回 map::end()

添加检查:

  map<string, a4::warehouse>::iterator it = warehouses.find(name);
if (it != warehouses.end())
it->second.receive_food(upc, amount);
else ; // handle the case of a missing key

以及对 map::find 的其他调用的类似检查。

关于c++ - Main 返回后出现 Segmentation Fault 11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14654661/

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