new恐怖症

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

new恐怖症

投稿記事 by せんちゃ » 14年前

ようやく1年度の授業も終了、最後の課題も提出しましたが…
タスクマネージャーを開きながらプログラムを実行していたところ、
パフォーマンスのコミットチャージの値がどんどんと増えていく…!!

というのは
ゲームタイトルシーン->ゲーム画面へ
という処理をするときに本来ならばタイトルシーンをdeleteしてゲームシーンをnew、
同じようにゲームシーンからタイトルシーンに戻るときはゲームシーンをdeleteしてタイトルシーンをnewする
というような感じで設計したはずで、ちゃんとデストラクタも呼んでるし(ちゃんと呼ばれてるし)、
画像もちゃんとDeleteGraphしてるし配列もちゃんとdelete[]しているにも関わらず、

シーンが移り変わるたびにメモリがどんどんと増えていく…


というようなこともあり、最近はゲームループ内にnewを置くのが怖くて怖くてたまりません。


的なことを先生に相談し、
「newを使わないで最初からメモリ領域取っておけばいいじゃん」と言われる。


まぁ実際のところそのほうが確かに安全ではあるのですが、
ちゃんとdeleteしているにも関わらずメモリリークを起こしている原因をとりあえず突き止めたいです。


そのへんちゃんと考えて設計したはずなんだけどなぁ…^^;


もう少し調べてみましょ

アバター
GRAM
記事: 164
登録日時: 14年前

RE: new恐怖症

投稿記事 by GRAM » 14年前

shared_ptr どうですか?
deleteと永遠におさらばできますよ
速度が気になるのならばintrusive_ptrお勧めです。こっちは自分が好きな奴です(shared_ptr より簡単に使えないのがミソですけど)
http://www.kmonos.net/alang/boost/smartptr.html
ここのサイトに紹介されています。
(・・・自分のようなboost中毒者になるかもですが(笑))

ISLe
記事: 2650
登録日時: 15年前

RE: new恐怖症

投稿記事 by ISLe » 14年前

Visual C++ならメモリリークの診断報告機能が標準装備されているので活用してみては?
"_CrtSetDbgFlag"で検索すると詳しい使い方が見付かりますよ。

アバター
バグ
記事: 130
登録日時: 15年前

RE: new恐怖症

投稿記事 by バグ » 14年前

まずは、本当にメモリリークしているのかを調べてみたほうがいいかもしれませんよ?

dic
記事: 658
登録日時: 15年前

RE: new恐怖症

投稿記事 by dic » 14年前

それはnewが問題なのですか?
理解できません

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

RE: new恐怖症

投稿記事 by せんちゃ » 14年前

GRAMさん

おお、自動的にdeleteしてくれるのですか!
それを使って書いてみるのもいいかもしれませんねw
検討してみます!

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

RE: new恐怖症

投稿記事 by せんちゃ » 14年前

ISLeさん

その関数は使ってみたのですが、いまいちそれっぽい結果は返ってきませんね…
もしかしたらメモリリークは起きていなくて、自分のパフォーマンス画面の見方が間違えてるだけなのかも、
と勘ぐっているのですがそれでも不安な感じがしてなりませんね^^;

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

RE: new恐怖症

投稿記事 by せんちゃ » 14年前

バグさん
そうなんですよねぇ…実際のところ、
本当にメモリリークを起こしているという確証が得られていないので(曖昧な感じです)
いろいろWindowsのperfmonから.NET CLR Memoryなどをカウンタで設定して調べたりもしてみたのですが、
グラフが著しく変わる事はなく、でも数値は明らかにどんどんと変わっていて
起きてるのか、起きてないのか、実際のところよくわかっていない現状です^^;

アバター
せんちゃ
記事: 50
登録日時: 15年前
住所: 江別市東野幌町
連絡を取る:

RE: new恐怖症

投稿記事 by せんちゃ » 14年前

dicさん
newが原因ではなくリソースの問題かもしれないと思い、いろいろ見ていったのですが、
どうやらそれが原因でもなかったみたいでした。
僕もnewが本当に原因なのか、と感じているのですが
それ以外に思い当たるふしが見つからないといいますか…
そもそもリークしているのかどうか自体怪しいものです汗