# gcc -v Reading specs from /usr/local/lib/gcc/i686-pc-linux-gnu/3.4.4/specs Configured with: ./configure Thread model: posix gcc version 3.4.4
I have compiled a simple test program in C++ using stl::map. #g++ -DDOESNT_WORK test.cpp #./a.out Added value TYpe=0name = varnum0value =199 Added value TYpe=1name = varnum1value =200 Added value TYpe=2name = varnum2value =201 Added value TYpe=3name = varnum3value =202 Added value TYpe=4name = varnum4value =203 Added value TYpe=5name = varnum5value =204 Added value TYpe=6name = varnum6value =205 Added value TYpe=7name = varnum7value =206 Added value TYpe=8name = varnum8value =207 Added value TYpe=9name = varnum9value =208 Size = 1 Type = 0Name = varnum0value= 199 #g++ -DTHIS_WORKS test.cpp # ./a.out Added value TYpe=0name = varnum0value =199 Added value TYpe=1name = varnum1value =199 Added value TYpe=2name = varnum2value =100 Added value TYpe=3name = varnum3value =100 Added value TYpe=4name = varnum4value =100 Added value TYpe=5name = varnum5value =100 Added value TYpe=6name = varnum6value =100 Size = 7 Type = 0Name = varnum0value= 199 Type = 1Name = varnum1value= 199 Type = 2Name = varnum2value= 100 Type = 3Name = varnum3value= 100 Type = 4Name = varnum4value= 100 Type = 5Name = varnum5value= 100 Type = 6Name = varnum6value= 100 File : test.cpp #include "uv_type.h" int main(const int argc, const char **argv) { UserVariable uv; char name[10]; char var[20]; #if defined (DOESNT_WORK) for (int i = 0; i < 10; i++) { sprintf(name, "varnum%d", i); sprintf(var, "%d", i + 199); uv.AddUserVar(i, name, var); } #endif #if defined (THIS_WORKS) uv.AddUserVar(0, "varnum0", "199"); uv.AddUserVar(1, "varnum1", "199"); uv.AddUserVar(2, "varnum2", "100"); uv.AddUserVar(3, "varnum3", "100"); uv.AddUserVar(4, "varnum4", "100"); uv.AddUserVar(5, "varnum5", "100"); uv.AddUserVar(6, "varnum6", "100"); #endif uv.Print(); return 0; } file: uv_type.h #ifndef UV_TYPE_H #define UV_TYPE_H #include <map> #include <iostream> typedef struct { int type; char name[40]; char data[80]; } UserVar; typedef std::map<char *, UserVar>UVTable; typedef UVTable::value_type UVEntry; class UserVariable { public: UserVariable() {} ~UserVariable() {} int AddUserVar(int type, char *name, char *value) { UserVar var; int ret = 0; UVTable::iterator iter; var.type = type; if (strlen(name) < 40) { strcpy(var.name, name); } else { return 1; } if (strlen(value) < 80) { strcpy(var.data, value); } else { return 1; } UVEntry entry(name, var); tbl.insert(UVEntry(name, var)); std::cout << "Added value" << std::endl; std::cout << "TYpe=" << type << "name = "<< name << "value =" << value << std::endl; return 0; } int DelUserVar(int type, char *name) { } void Print() { UVTable::iterator iter; std::cout << "Size = " << tbl.size() << std::endl; for (iter = tbl.begin(); iter != tbl.end(); iter++) { UserVar &var = iter->second; std::cout << "Type = " << var.type << "Name = " << var.name << "value= " << var.data << std::endl; } } protected: UVTable tbl; }; #endif -- Summary: bug in g++ a.out for stl::map Product: gcc Version: 3.4.4 Status: UNCONFIRMED Severity: major Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: lbana at hotmail dot com GCC host triplet: Linux 2.6.19-1.2911.6.5.fc6 #1 SMP i686 i686 i386 GNU/Linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31825