かなり基本的なことですいませんが、
下記のようなイメージのコードで確保したメモリを
確実に開放するにはどうしたらいいでしょうか?
やりたいこととしては、動的に確保したメモリにデータを
入れて、それをベクトルに入れて使いまわしたいです。
下記のコードから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の中身も利用できなくなってしまった
No.1ベストアンサー
- 回答日時:
> 下記のコードからfreeの部分をやめても大丈夫でしょうか?
何をもって大丈夫とするかによります。簡単な処理を行ってすぐ終わるようなプログラムであれば、現実的には大丈夫かと思います。
> その場合、どうやってメモリ開放するんでしょうか?
プログラムを終了させるしかありません。
> ベクトルが消滅すればメモリが開放されるんでしょうか?
解放されません。
単に、ワイド文字列をベクタで管理したいだけであれば、素直にstd::wstringを使った方がよいかと思います。
ご回答ありがとうございます。
なるほどですね。
std::wstring良いですね。実は知らなかったです。。
あー。
wchar_t*を使いまくってますので、変えるのがちょっと大変です。
できれば、ベクタの中身を自力で開放するのに切り替えたいですが、
可能でしょうか?
すいません。
No.2
- 回答日時:
> できれば、ベクタの中身を自力で開放するのに切り替えたいですが、
> 可能でしょうか?
可能かどうかで言えば、可能です。
適当なアロケータ(例えばmy_allocator)を定義して、std::vector<wchar_t*, my_allocator>を特殊化してやればよいわけです。ただ、非常に面倒なので、あまりお勧めできませんが、std::vectorから派生した方が楽かもしれません。
度々すいませんありがとうございます。
そうですか。。
ん~
すいません、最後にもう一つ教えてください。
std::vectorの代わりにstd::listをつかった場合
メモリ開放が楽になったりしますかね?
なんか必死の抵抗って感じですが^_^
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PDF パソコンからUSBメモリにPDFを移したらファイルを開けない 2 2022/08/22 11:42
- CPU・メモリ・マザーボード Windows11アップデート後の不具合(メモリ不足)について 9 2023/01/04 11:34
- ドライブ・ストレージ 最近、外付けSSDというのが出回ってますが、USBメモリと比較してどっちが安い?どっちが高性能? 6 2022/04/23 10:51
- Visual Basic(VBA) エラー処理 3 2022/04/11 14:58
- C言語・C++・C# sprintf()の使い方について 1 2022/08/17 16:16
- CPU・メモリ・マザーボード 増設が大変でし 5 2022/07/19 16:29
- USBメモリー・SDカード・フラッシュメモリー 銀行が振込データの受け渡しに未だにFDを使っている理由は「FDDがAドライブ固定だから」って本当? 11 2022/06/02 03:53
- CPU・メモリ・マザーボード ノートパソコンの増設メモリ選びについて教えてください。 3 2023/01/05 12:58
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- CPU・メモリ・マザーボード Windows10 64bitパソコンのメモリ 4GBから8GBへ増設 11 2023/01/25 18:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
VBAの配列サイズとメモリに関して
-
メモリが不足しています(VBA)
-
FindFirstFile ハンドル開放
-
EXCEL-VBAにてADOのレコードセ...
-
組み込み系でのmallocについて
-
malloc関数の使い終わった後の...
-
マクロのスピードがダウンする??
-
C#のOutOfMemoryException発生...
-
【C言語】再帰が時間がかかる...
-
大きな配列を使うには?
-
GetAdapterInfoによりマックア...
-
エクセルVBA 大容量CSVファイル...
-
移動可能メモリ
-
「ヒープサイズの設定」て何?
-
ちなみに、for (i = 0; str[i] ...
-
変数をあなたの身近なものに例...
-
エクセル キャッシュメモリー...
-
Visual Studioのメモリリークに...
-
マインスイーパ、自動解析プロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語で、メモリを解放しないで...
-
VBAの配列サイズとメモリに関して
-
「ヒープサイズの設定」て何?
-
エクセルのメモリ使用状況/Appl...
-
エクセルVBA 大容量CSVファイル...
-
EXCEL-VBAにてADOのレコードセ...
-
バッチファイルでの実行EXEのメ...
-
メモリ不足
-
メモリのセグメント違反の解決...
-
メモリが不足しています(VBA)
-
【C言語】再帰が時間がかかる...
-
ファイルマッピング関数で失敗
-
C言語:関数のメモリ上でのサイ...
-
メモリの解放の仕方
-
VC++におけるメモリ使用量について
-
メモリの消費量について
-
Bitmapを重ね合わせる方法
-
メモリを解放しないとどうなる?
-
C#のOutOfMemoryException発生...
-
メモリの解放について VB6 VBA
おすすめ情報