std :: карта сломана в алхимии? - PullRequest
3 голосов
/ 21 сентября 2010

Следующий код проверяет использование std :: map с std :: string в качестве ключа:

#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», как и ожидалось. Однако, когда скомпилировано с алхимией, он напечатает «test1: 3» (!). Здесь что-то не так.

Есть ли обходные пути для этого или я просто застрял?

Ответы [ 3 ]

2 голосов
/ 24 сентября 2010
* * * * * Строка класса в алхимии нарушена.В операторе копирования есть ошибка (=).карта отлично работает с другим классом
1 голос
/ 21 сентября 2010

Конечно, похоже на ошибку.

Как правило, исходный код (заголовки) является частью дистрибутива STL. Можете ли вы пройти через него, чтобы узнать, что происходит? Сравните источник с версией GCC.

Похоже, у вас есть чугунный футляр, который вы можете отправить продавцу для ремонта, если он подтвердится.

0 голосов
/ 21 сентября 2010

Разве вы не должны использовать cstdio?Но ваш код прекрасно работает с версией gcc 4.4.2 20091027, я протестировал его.Это полный код или что-то там, что может перезаписывать стек.

#include <cstdio>
#include <map>
...