2016-10-17 9 views
0

現在、私はValgrindを使用してメモリリークをチェックし、Purifyを代わりに使用しています。 Valgrindはヒープで作成された配列のアクセス違反を知ることができますが、スタックにはアクセスできません。スタック変数のアクセス違反を調べることができますか?

char* a = static_cast<char*>(malloc(sizeof(char) * 5)); 
a[7] = 'c'; 
printf("%c\n", a[7]); 
free(a); 

上記のコードでは無効な書き込みおよび読み取りのValgrindポイントですが、次のコードは無効です。

char a[5] = {0}; 
a[7] = 'c'; 
printf("%c\n", a[7]); 

両方のコードブロックのアクセス違反を特定できますか?

答えて

0

ユーザーズガイド(ftp://ftp.software.ibm.com/software/rational/docs/v2003/purify/html/ht_m_sbr.htm)と(ftp://ftp.software.ibm.com/software/rational/docs/v2003/purify/html/ht_m_sbw.htm)によれば、Purifyはスタック境界の読み取りと書き込みの両方を検出できます。

実際の例を試してみると、ヒープデータの違反だけがPurifyでも検出されました。私は、LinuxとSolarisの両方で、IBM(7.0.1)の最新バージョンをテストしました。

gcc 4.8以降では、-fsanitize = addressを参照してください。

関連する問題