# 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

Reply via email to