0

私は構造を持っています:

typedef struct { char *ptr; } A;

そして地図

typedef std::map<std::wstring, A> myMap;

マップを埋めている間、mallocを使用してptrフィールドにメモリを割り当てました。マップをクリアする際のメモリリークを防ぐために、次のコードがあります(actualMapは、クリアする必要のある実際のマップです)。

for (myMap::iterator iter = actualMap.begin(); iter != actualMap.end(); ++iter)
{
    Free((iter->second).ptr);
}
actualMap.clear();

ただし、アプリケーションを正常に起動すると、Freeの実行中に例外が発生します。VS2010を介してアプリケーションを直接起動した場合、この例外は生成されません。私は何かを逃したことがありますか?

ありがとう。

4

1 に答える 1

0

生のポインタの代わりにC++std::stringを使用することをお勧めします

struct A
{ 
  std::wstring data;
};

std::map<std::wstring, A> myMap;

actualMap.clear();

aには文字列を指すポインタが1つしかないため、myMapは次のようになります。

std::map<std::wstring, std::wstring> myMap;
于 2013-01-18T06:21:52.393 に答える