メモリーリーク発見方法
■ このスレッドは過去ログ倉庫に格納されています
0001C++の弱点?
NGNGスマートで分かりやすいヤツがあったらご教授下さい。
0002>1
NGNG0003名無しさん@お腹いっぱい。
NGNGどうかのう。
0004名無しさん@お腹いっぱい。
NGNGコードウォリアーはどうでしょ?
詳しいひと教えてちょ。
0005名無しさん@お腹いっぱい。
NGNG予めプールを予約してその範囲内でとる奴。
10年前UNIXーSVR4で使った。今は使って無くて
全然メンテしてないからいまの環境で使えるかは分からない。
もし迷惑でなかったら一週間以内にここでアップするけど。
0006>5
NGNG0007名無しさん@お腹いっぱい。
NGNG00081
NGNGコードガードとは一体どんなものなんですか?
ツールみたいなものなんでしょうか?
00091
NGNGBoundCheckerもコードガードも
検索しても見つかりません。
サイト紹介していただけませんか?
00103
NGNGhttp://www.xlsoft.com/jp/products/Bc/bchecker.html
00111
NGNGすげー高くないっか?
VC++より高い・・・。これは買えないっす・・・。
もっと安価なもの無いでしょうか。
とりあえずVC++より高いのはやだなぁ。
001210
NGNGCode GuardはBorland C 5.0(BCBの前)についてます。
BC5.0は、いま、インプライズで格安で在庫処分やってます。
安いのがお望みなら、そちらのHP見てみては?
但しC++コンパイラとしては標準への対応にすこし難があります。
あと、BC5についているCGは、VCからは使えません。
0013名無しさん@お腹いっぱい。
NGNGVCとかからも使えるような独立したものなのかは知らない。
00141
NGNGちくちく確認していくしか無いんでしょか。
なんかめんどくさいなぁ。
(他人のコードをデバッグするのウザイっす)
VC++のヘルプに載ってるのは、タダのマクロだし・・・
0015名無しさん@お腹いっぱい。
NGNG00161
NGNGnew/deleteを宣言してログを出すようにしてみました。
解らない事は無いけどなんかprintfデバッグみたいで嫌。
基底のコンストラクタ/デストラクタに参照カウンタを装着して、
デストラクタで0になったらメッセージボックス出したりすると
ステキかつわかりやすいかな?(出なかったら駄目)
>15
??コピーコンストラクタ書くと良いんですか?
どのような効果が期待できるのでしょう?
0017>16
NGNGだったらモジュール分けして動的に再ロード出来るようにするとかすればいいんじゃない?
参照カウンタ付けるなら、名前も付けりゃいいんじゃない?
で全部のヒープリストをダンプ出来る機能を作ればいいかと
001864
NGNGVC++6と一緒に使ってますが、メモリーリークは検
出できないことも多いです。Purifyも入手したので、
評価が終わり次第、書き込みます。
0019名無しさん@お腹いっぱい。
NGNGちゃんとしてあげないと鼻から悪魔の原因になるからね。
0020>1
NGNGただし、この中ではC++の標準関数が使えない可能性があるから(coutですら動かない)、
Cでインプリメントしないといけないけどね。
ここでログ取ったら楽じゃない?
00211
NGNGありがとうございます。
GlobalMalloc/GlobalFreeで実装すれば良いのかな。
>17
結局人間がそれを解析してメモリリークを発見しなければならないからです。
バグありコードを生産してくれるプログラマはprintfデバッグを行うことすら期待できません。
出来る限り、人間の手を通さないでバグがある事をバグ生成者に通知したいんです。
とはいえ、ログを解りやすくする事はできるので、
perlでメモリーリーク部分だけ抜き出すようにしてみます。
ちなみに私自身printfデバッグは嫌いじゃありませんよ。
それを見ないやつがいるのが嫌なんです。
00221
NGNG各実装の注意点はこんなモンでよいのかな?
newの実装。
●if( size == 0 )size = 1;
●失敗時 throw std::bad_alloc;
●new_handlerは使わない事が解ってれば必要無いのかな?
deleteの実装。
●if( rawMemory == NULL )return;
00231
NGNGものすごい量のログになってしまいました。
テーブルにアドレスのリストを持っておいて、
アプリ終了時に開放されてない部分のログだけを吐き出したいんですが、
アプリの最後にデストラクタが呼ばれるクラスってどうやって見つける/指定すれば良いのでしょう?
ご存知のかたがいらっしゃったら教えてください。
0024名無しの笛の踊り
NGNGMAINをちょっと書き換えて一段下げて、MAINを出たらログ吐き
したらだめ?
002520
NGNGMSDNで調べてくれい。ちょっと、使ったことないので微妙。
00261
NGNG最後にデストラクタが呼ばれるものは、
グローバルに宣言されてるクラスです。
全てnewでインスタンス化する形にできれば良いのですが、
(調べてないけど)多分staticなクラスメンバも同じ扱いのため、
ちょっと無理です。
こうなってくるとどのデストラクタが最後に呼ばれるか解らなくなってしまうのです。
>25
これただのマクロみたいなんで、クラス内でオーバーライド宣言してる
operator newが影響を受けてしまう気がします。
だいじょぶなんでしょうか。
まあ百聞は一見にしかずという言葉もあるので、暇が出来たら試してみます。
0027名無しさん@お腹いっぱい。
NGNGなんでC++でグローバルにクラスインスタンス作ってるの?
シングルトンにしときーな。
VC++APPWIZのtheAppは、単に設計者があほなだけ。
0028名無しさん@お腹いっぱい。
NGNG勉強になったよ。
00291
NGNGすいません。
シングルトンとはどのような意味/効果なんでしょうか?
教えていただけると嬉しいです?
0030名無しさん@お腹いっぱい。
NGNGあるオブジェクトのインスタンスをプロセス内で
一個だけに制限する常套手段。
デザインパターンの一種。
0031名無しさん@お腹いっぱい。
NGNGこうするだけですよ。
class CFoo
{
private:
static CFoo *singleFoo;
CFoo();
~CFoo();
public:
static Create() { if (!singleFoo) singleFoo = new CFoo; }
static Destroy() { delete singleFoo; singleFoo = 0; }
};
CFoo *CFoo::singleFoo = 0;
0032名無しさん@お腹いっぱい。
NGNGは
static CFoo Get() { if (!singleFoo) singleFoo = new CFoo;return singleFoo; }
にしないの?
003332
NGNGどっちでもいいこったね。枝葉の事。
インスタンスの使い道によってだね。
003428>31
NGNGグローバルにするな、って話だったっけね(説明不足)
さんきゅー。
0035名無しさん@お腹いっぱい。
NGNGここでアップはうまくいかないんで、下のURLへ。
http://www.fuel.co.jp/rmalloc.html
んーこういうとき気軽に使えるサーバーがあればいいんだけどね。
ringとかlinux.or.jpとかそうもいかない。
0036名無しさん@お腹いっぱい。
NGNGクリキントン?
0037名無しさん@お腹いっぱい。
NGNGうそ。対語なんてねーだろうよ
0038名無しさん@お腹いっぱい。
NGNG0039名無しの笛の踊り
NGNGマルチたん・・・ハァハァ
00403
NGNGBoundsChecker6.01は仕事で使ってます。Delphi5、
VC++6と一緒に使ってますが、メモリーリークは検
出できないことも多いです。
参考になります。
>Purifyも入手したので、評価が終わり次第、書き込みます。
たのしみにしています。Thanks!!
0041で、
NGNG0042名無しさん@お腹いっぱい。
NGNGデバックの時に不便ですよね。
以前、Winで自作のライブラリでやった時は、
特定のメッセージ受け取ったら 全ヒープをファイルに吐くような仕掛けを
しといて、そのファイルを解析してリーク追跡したりしてたけど
今はどんな感じなのかな?
0043名無しさん@お腹いっぱい。
NGNG■ このスレッドは過去ログ倉庫に格納されています