2016-10-17 1 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 points는 유효하지 않지만 다음 코드는 유효하지 않습니다.

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를 참조하십시오.

관련 문제