std::map 在炼金术中损坏了?

发布于 2024-09-24 05:28:43 字数 574 浏览 4 评论 0原文

以下代码测试以 std::string 作为键的 std::map 的使用:

#include <stdio.h>
#include <map>
#include <string>
using namespace std;

typedef map<string, int> test_map_t;

int main(int argc, char **argv) {
    test_map_t test_map;

    test_map["test1"]= 1;    
    test_map["test2"]= 2;
    test_map["test3"]= 3;    

    string tmp= "test1";
    printf("%s : %d \n", tmp.c_str(), test_map[tmp]);

    return 0;
}

当使用普通 gcc 编译时,此测试将按预期打印出“test1 : 1”。但是,当使用 alchemy 编译时,它将打印“test1 : 3”(!)。这里有些事情非常不对劲。

有没有任何解决方法,或者我只是被困住了?

The following code tests the use of std::map with std::string as a key:

#include <stdio.h>
#include <map>
#include <string>
using namespace std;

typedef map<string, int> test_map_t;

int main(int argc, char **argv) {
    test_map_t test_map;

    test_map["test1"]= 1;    
    test_map["test2"]= 2;
    test_map["test3"]= 3;    

    string tmp= "test1";
    printf("%s : %d \n", tmp.c_str(), test_map[tmp]);

    return 0;
}

When compiled with ordinary gcc, this test will print out "test1 : 1", as expected. However, when compiled with alchemy it will print "test1 : 3" (!). Something is very wrong here.

Are there any workarounds for this or am I just stuck?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

晌融 2024-10-01 05:28:43

类弦在炼金术中被破坏。运算符复制 (=) 中存在错误。地图与其他类配合良好

class string is broken in alchemy. There is a bug in operator copy (=). map works fine with other class

紫﹏色ふ单纯 2024-10-01 05:28:43

当然看起来像一个错误。

通常,源代码(标头)是 STL 分发的一部分 - 您可以逐步了解发生了什么吗?也许可以将源代码与 GCC 版本进行比较。

如果确认的话,您似乎有一个铸铁外壳可以将其带到供应商处进行修复。

Sure looks like a bug.

Typically the source code (headers) is part of STL distribution - can you step thru to find out what is going on? Compare source to GCC version maybe.

Seems like you have a cast-iron case to take this to the vendor for fix if confirmed.

梦罢 2024-10-01 05:28:43

你不应该使用cstdio吗?但你的代码与 gcc 版本 4.4.2 20091027 完美配合,我已经测试过。是完整的代码还是有什么东西可能会覆盖堆栈。

#include <cstdio>
#include <map>

Should not you use cstdio? But your code works perfectly with gcc version 4.4.2 20091027, i have tested it. Is it the complete code or something is there which might be overwriting the stack.

#include <cstdio>
#include <map>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文