合理的Purifyは、ランタイムエラーがメモリリークを示していませんか?
-
21-09-2019 - |
質問
このプログラミング質問のように表示されますが、本質的にコードを扱っていない可能性があります。
I有し範囲外の配列インデックスのような明白なエラーを有するテスト次のコード、メモリリーク: -
#include "stdio.h"
#include "stdlib.h"
main()
{
int i;
char *ptr;
ptr = (char*)malloc(5);
for(i=0;i<10;i++)
{
ptr[i]=(char)i;
}
}
このコードは、MS-のVisual Studio 2008の上に構築されています。
私は私のコードで実行時エラー、メモリリークを識別するために合理的にPurify(バージョン7.0)を使用しようとしています。向けてPurifyの中の使用のためのビルドコードに、私はMSVS-2008のプロジェクト設定で物事の下に行っているかについていくつかのポインタを読んだ後: -
1)無効インクリメンタルリンク2)デバッグ情報コンパイラフラグ/紫
であります 。値デフォルトにチェックし、「Basicランタイム -3)リンカオプションを設定します。 。。いいえ
4)は、余分なリンカオプション/固定を追加しました
5。)ビルド設定がデバッグされ、何の最適化が有効になっていません。
そして、私が構築し、exeファイルを取得します。私はそれが楽器を浄化同じで実行するには、このexeファイルを使用します。しかし、メモリリーク、上記のコードに存在する..etc約エラーが、このexeファイルをインストルメント/ショーを実行していない後に浄化して出力ウィンドウを
異なるバイナリのPurifyの出力ウィンドウが表示出力(私のEXEファイルや他のいくつかのシステムDLL)が実行され、ロードされたインストルメント。しかし、私のexeファイルに関するデータを示している出力で、エラーメッセージは表示されません。
私の気持ちは、私はMS-VS 2008.or生成された実行形式のexeファイルを構築するPurifyのことではない/互換性は理解しながら、コンパイル/リンカオプションを与えることに間違いを作っていますか?
1)ここで何が間違っているだろうか? exeファイルを構築しながら、より多くのオプションは、私は何が必要でしょうか?
2)が正しいPurifyのを使用しての私のプロセスであり、または私は何かが足りないのですか?私は浄化し、実行時間分析を行った後に私のプログラムのすべてのエラーを表示するように取得できますか?
3)他のツールメモリリークをdeteclすることができます(無料/商用ライセンス)、バインドされたエラーの配列うち、Cのコードの実行時間分析を実行して、など。初期化されていないポインタ、変数、メモリ破損の使用があります。
申し訳ありませんが長めのメールのために、しかし明確でなければならなかった。
感謝ます。
〜AD
解決
猛烈に多くのことをしようとした後、インターネット上で読んで、私はSOLNを見つけました。この
のために1)として、新しい環境変数を追加します。
名前= IBM_RATIONAL_PURIFY_ENABLE_SELECTIVE
ベール= 1
2)別にMSからの設定が必要とされているの下に、私は、OPで述べたのVisual Studioプロジェクトの設定 -
C / C ++ - >コード生成=ランタイムライブラリ - >マルチスレッドデバッグ/ MTdに
uはPurifyの中に実行可能ファイルを実行すると、そして、あなたは、設定の選択をクリックして、あなたのexeファイルを選択する必要があります。
次にuが実行したときに、それが必要なエラーに関する情報をcolelctする必要があります。
〜AD