C ++中的地图容器中的插入操作失败

时间:2013-06-25 06:06:55

标签: c++

将代码放在这里我的代码非常复杂。我将尝试解释我是如何执行地图操作的。

connection.h

struct mAttributeTable_Compare
{
bool operator()(char* s1, char* s2) const
{
    return (strcmp(s1,s2) < 0);
}
};
typedef struct
{
  map<Char*, Attribute*, mAttributeTable_Compare> mAttributeTable_API;
  map<Char*, Attribute*, mAttributeTable_Compare>::iterator iter_API;      

} Connection_vars;
class Attribute
{
    protected:
           Attribute(char*);

    public:
        Void            AddValue(Char* value);
        Char*           GetName();
        Char*           GetValue(Int index = 0); 

    private:
        Char*   mName;
        vector<Char*>   mValues;      
        Int     mType;
        Int     mCount;
};
class Connection
{
   public:
    Connection();
   Protected:
    Void  ProcessAttribute(int,Attribute*);
   private:
    map<Char*, Attribute*, mAttributeTable_Compare> mAttributeTable;
    map<Char*, Attribute*, mAttributeTable_Compare>::iterator iter;      
    void *mConnVars;
};

connection.cpp

#include "connection.h"
Connection()
{
    mConnVars = (Connection_vars *)calloc(1, sizeof(Connection_vars));  
    if(!mConnVars)                                                      
    {                                                                   
      return;                                                           
    }                                                                   

}
Void Connection::ProcessAttribute(int attrName, Attribute* attribute )
{
 Attribute* attr_API;
 Connection_vars *my_ConnectionVars = (Connection_vars *)mConnVars;
 if ( attrName == 10 )
 {
  attr_API = new Attribute("TraceOutput");
  Char* fileName = (Char*)attribute->GetValue(0);
  attr_API->AddValue(filename);

  /* this map variable insert operation is working*/ 
  mAttributeTable.insert(pair<Char*, Attribute*>(attr_API->GetName(), attr_API);

  /* But the below operation is returning a SEGMENTATION FAULT*/
  (my_ConnectionVars ->mAttributeTable_API).insert(pair<Char*, Attribute*>(attr_API->GetName(), attr_API);


}
Attribute::Attribute(Char* name)
{ 
    mName = strdup(name);
    mType = 0; 
    mCount = 0;
}

Char* Attribute::GetName()
{
    return mName;
}

Char* Attribute::GetValue(Int index)                        
{
    if (index >= 0 && index < (Int)mValues.size())
        return mValues[index];
    else
        return NULL;
}
Void Attribute::AddValue(Char* value)
{
    Char* temp = (Char*)strdup(value);              

    mValues.push_back(temp);
    mCount++;
}

在上面的ProcessAttribute()中,我无法从头部插入结构(Connection_vars)中声明的地图容器(mAttributeTable_API)并获得SEGMENTATION FAULT,因为我能够插入到地图容器中(mA​​ttributeTable) )在类(Connection)中声明为私有变量。我无法找到出错的原因。请帮我解决这个问题。非常感谢任何帮助!

提前致谢!

2 个答案:

答案 0 :(得分:0)

  

在上面的ProcessAttribute()中,我无法插入到地图中   容器(mAttributeTable_API)

&#39;空隙&#39;没有命名类型。

发货!

答案 1 :(得分:0)

我会说以下一行:

mConnVars = (Connection_vars *)calloc(1, sizeof(Connection_vars));

不会正确初始化Connection_vars结构中的std :: maps。 它只会分配内存并用零来初始化它们。

使用以下内容替换以上内容可能会有所帮助:

mConnVars = new Connection_vars;