gpt4 book ai didi

c++ - 取消引用刚刚插入的 std::map 值有时会导致访问冲突

转载 作者:太空狗 更新时间:2023-10-29 23:19:07 27 4
gpt4 key购买 nike

Label_Info 只是一个带有一些 int 成员的普通类:

class Label_Info {
public:
Label_Info();
unsigned int x, x1, x2, y, y1, y2, size;
};

Label_Info::Label_Info() {
this->x = this->y = this->size = 0;
this->x1 = this->y1 = -1;
this->x2 = this->y2 = 0;
}

然后,用gcc编译:

std::map<unsigned int, Label_Info> labels_info;
unsigned int label = 1;
Label_Info *label_info = &labels_info[label];

在极少数情况下,我会在第三行因访问冲突而停止。据我了解,发生的事情是 std::map 为键 1 插入一个新的 Label_Info,然后指向它的指针是 label_info。然后(至少当它没有崩溃时!)我可以像这样访问成员:

label_info->x = 25;

...等等。我没有收到大约 1,000,000 次插入的访问冲突,然后,突然,砰。我检查了通常的嫌疑人:32 位阈值和内存不足,当它引爆时,插件上的一切看起来都正常。我知道这是一个插入,因为我可以看到它在调试器中通过 STL std::map 代码,但我无法很好地阅读它来判断它试图访问什么以进行插入。

那么这段代码是坏消息吗?任何比我更了解 C++ 的人的见解都将不胜感激。谢谢。

最佳答案

您向我们展示的代码应该没有问题。但是,几乎可以肯定还有其他您没有向我们展示的代码直接导致了问题,或者更可能只是在某些情况下导致内存损坏,当它恰好命中时, map 就会中断。

如果您可以在 Linux 上编译您的代码库,valgrind 很有可能会为您找到内存错误。

关于c++ - 取消引用刚刚插入的 std::map 值有时会导致访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629011/

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