プロが教えるわが家の防犯対策術!

かなり基本的なことですいませんが、
下記のようなイメージのコードで確保したメモリを
確実に開放するにはどうしたらいいでしょうか?

やりたいこととしては、動的に確保したメモリにデータを
入れて、それをベクトルに入れて使いまわしたいです。
下記のコードからfreeの部分をやめても大丈夫でしょうか?その場合、どうやってメモリ開放するんでしょうか?
ベクトルが消滅すればメモリが開放されるんでしょうか?
テストしてみましたが、減った気配がない。。。
根本的に考え方がおかしいかもしれません。。。
お助けください。
お願いします。


wchar_t str[6] = L"あいうえお";
wchar_t* mem = (wchar_t*)malloc(6 * sizeof(wchar_t));
wcsncpy(mem, str, 6);

std::vector<wchar_t*> vetorTemp; //実際グローバル変数
vetorTemp.insert(vetorTemp.end(), mem);

free(mem); // ここで開放するとvetorTempの中身も利用できなくなってしまった

A 回答 (3件)

> 下記のコードからfreeの部分をやめても大丈夫でしょうか?



何をもって大丈夫とするかによります。簡単な処理を行ってすぐ終わるようなプログラムであれば、現実的には大丈夫かと思います。

> その場合、どうやってメモリ開放するんでしょうか?

プログラムを終了させるしかありません。

> ベクトルが消滅すればメモリが開放されるんでしょうか?

解放されません。

単に、ワイド文字列をベクタで管理したいだけであれば、素直にstd::wstringを使った方がよいかと思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

なるほどですね。
std::wstring良いですね。実は知らなかったです。。
あー。

wchar_t*を使いまくってますので、変えるのがちょっと大変です。

できれば、ベクタの中身を自力で開放するのに切り替えたいですが、
可能でしょうか?
すいません。

お礼日時:2005/09/07 00:26

> std::vectorの代わりにstd::listをつかった場合


> メモリ開放が楽になったりしますかね?

何も変わりません。
    • good
    • 0

> できれば、ベクタの中身を自力で開放するのに切り替えたいですが、


> 可能でしょうか?

可能かどうかで言えば、可能です。
適当なアロケータ(例えばmy_allocator)を定義して、std::vector<wchar_t*, my_allocator>を特殊化してやればよいわけです。ただ、非常に面倒なので、あまりお勧めできませんが、std::vectorから派生した方が楽かもしれません。
    • good
    • 0
この回答へのお礼

度々すいませんありがとうございます。

そうですか。。
ん~

すいません、最後にもう一つ教えてください。
std::vectorの代わりにstd::listをつかった場合
メモリ開放が楽になったりしますかね?
なんか必死の抵抗って感じですが^_^

お礼日時:2005/09/07 01:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!