私は静的クラスを持っていますが、このクラスでは静的なmap<string, int>
が宣言されています。 静的メソッドの1つがマップにデータを挿入します。プロセスのある時点で、このデータはオーバーライドされます。静的マップに保存された文字列がオーバーライドされています
charが文字列に変換して、マップに挿入し、次のようにしている:
static map <string, int>
int a =10;
const char* arg= "hello";
string toStr(arg);
map.insert(make_pair(toStr, a);
データが破壊されることがありますか? マップは文字列(toStr)のポインタを指し、それをコピーしませんか? その場合、メモリリークのない地図にデータを保存するオプションはありますか?割り当てられた値を解放するためのデストラクタのオプションがないので、mallocは問題があるようです。
は、[更新] これは、関連するコード、同じ静的クラスのすべてです:データが破壊されることがありますどのような
static map<string, int> levelMap;
static int getLevelFromMap(const char* input)
{
map<string, int>::const_iterator levelMap_it = levelMap.find((char*)input);
if (levelMap_it == levelMap.end()) {
return LEVEL_NOT_SET;
}
return levelMap_it->second;
}
static void insertToMap(const char* input, int level)
{
string inputToStr(input);
levelMap.insert (make_pair(inputToStr, level));
}
static int getLevel (const char* input)
{
int level;
if (input == NULL)
return DEFAULT_LEVEL;
level = getLevelFromMap (input);
if (level == LEVEL_NOT_SET) {
// Not in the map, check in file
level = getLevelFromFile (input);
if (strcmp(input, ROOT_LEVEL) == 0) {
if (level == NOT_IN_FILE) {
return level;
}
else if (level == LEVEL_NOT_SET) {
level = DEFAULT_LEVEL;
}
insertToMap (ROOT_LEVEL, level);
return level;
}
if (level == NOT_IN_FILE) {
return DEFAULT_LEVEL;
}
if (level == LEVEL_NOT_SET) {
unsigned int len = ((strlen(ROOT_LEVEL) > strlen(input)) ? strlen(ROOT_LEVEL) : strlen(input)) + 1;
char parent_input[len];
int retval = getParent(input, parent_input, sizeof(parent_input));
if (retval == -1) {
return DEFAULT_LEVEL;
}
level = getLevel (parent_input);
if (level != NOT_IN_FILE) {
insertToMap (input, level);
}
}
}
return level;
}
データがコピーされました...あなたが示したもの以外のものは間違っています... – mark
マップ値は別の方法から検索されています したがって、私は上記のコードの同じ範囲にはありません。他のメソッドは、この静的マップ内のchar *(map.find((char *)value))を探しています。 – 15412s
無効なC++コードを5行追加しました。このコードがいつ、どこで、どのように呼び出されたかのコンテキスト。 [mcve]を投稿してください。 – PaulMcKenzie