私のコードは、ここに置くには非常に複雑です。マップ操作の実行方法を説明しようと思います。
接続.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;
};
接続.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 を取得できませんでした。クラス内のプライベート変数(接続)。私が間違っている理由を見つけることができません。これを修正するのを手伝ってください。どんな親切な助けも大歓迎です!
前もって感謝します!