2011-09-21 4 views
3

벡터 및 배열 (범위를 벗어난 액세스)에서 잘못된 액세스를 찾기 위해 C++ 코드를 분석하고 싶습니다. 도구가 있습니까?C++ - 범위를 벗어난 액세스를 감지합니다.

미리 감사드립니다.

+2

대부분의 C++ 구현은 검사 된 표준 라이브러리 구현과 함께 제공됩니다. 설명서를 확인 했습니까? – PlasmaHH

+2

잘 작성된 코드가 시작입니다. 자유롭게 주장을 추가하십시오. 런타임에'valgrind'를 사용하여 잘못된 메모리 접근을 검사 할 수 있습니다. –

+2

코드를 "assert"할 수 있습니다. vector의 경우 []를 at()로 대체하면 정의되지 않은 동작 대신 예외가 발생합니다. –

답변

10

gcc를 사용하는 경우 정의 된 _GLIBCXX_DEBUG 및 _GLIBXX_DEBUG_PEDANTIC으로 컴파일 할 수 있습니다. 범위를 벗어난 액세스가 요청되면 glibc 어설 션을 발생시킬 수 있습니다. :: memcheck도 나쁜 기억을 발표 할 예정이다 Valgrind의와

테스트

+1

그 플래그는 매우 유용하지만 최근에 그들이 생성 한 사례를 발견했습니다 ** segfaults **. ** boost regex ** 라이브러리와 함께 사용하려고하면 프로그램이 실패합니다. 왜 이런 일이 일어나는지, 또 어떤 영향을 받는지 상상할 수 없습니다. 자세한 내용은 https://svn.boost.org/trac/boost/ticket/5911을 참조하십시오. –

+0

@ P.ChristopoulosCharitos 티켓에서 말했듯이 Boost.Regex는 정상 ABI로 컴파일되고 '_GLIBCXX_DEBUG'는 변경됩니다 , 따라서 그것을 사용하는 응용 프로그램은 ABI 불일치로 인해 충돌합니다. – Ruslan

2

정적 분석을 수행하는 일부 지불 도구가 있습니다.

0

이 다음이 클래스를 사용 .... 당신 배열에 클래스를 생성하고 생성 일부 제어 기능을 사업자와 해당 클래스 과 읽습니다.

관련 문제