2010-07-08 3 views
1

포인터를 삭제할 때 힙 손상 오류가 발생합니다. 이 프로젝트의 경우 Randomized Base Address에 대한 연결 매개 변수는 Disable Image Randomization으로 설정됩니다. 그런 식으로 설정된 이유를 모르겠습니다. 어쨌든, 라이브러리의 특정 헤더 파일이 포함될 때만 오류가 발생합니다. 이상한 점은 헤더 파일이 포함 된 경우에도 무작위 기본 주소가 이미지 임의 화 사용으로 설정된 경우 오류가 나타나지 않는다는 것입니다. 그래서 실제로 힙 손상이 있습니까 아니면 그냥 연결 매개 변수를 변경해야합니까?포인터를 삭제할 때 힙 손상 오류가 발생했습니다.

+1

언제든지 기본 포인터를 통해 삭제할 수 있습니까? 그렇다면 기본 클래스가 가상의 dtor를 정의하는지 확인하십시오. – stinky472

+2

이것은 대개 (거의 항상) 코드의 문제이며 컴파일러 설정이나 시스템 헤더가 아닙니다. 아마도 어딘가에 어떤 메모리를 덮어 썼을 수 있으며 우연히 특정 헤더를 포함하지 않거나 특정 컴파일러 설정을 사용하지 않을 때 우연히 시스템의 중요한 부분을 공격하지 않았습니다. 코드 샘플과 같은 자세한 정보가 도움이 될 것입니다. – 5ound

+5

클래스의 코드를 게시하십시오. –

답변

2

무작위 기본 주소는 항상 같은 주소에 라이브러리를로드할지 여부를 알려줍니다. 무작위 화는 코드의 호출/수정으로부터 악의적 인 공격을 막기 위해 일정 수준의 보안을 제공합니다.

거의 확실하게 프로젝트에 힙 문제가 있으며, 포함되는 헤더와 관련이 없을 가능성이 큽니다. 헤더가 손상된 힙을 사용하는 기호를 도입하여 문제를 일으킬 가능성이 있습니다. 마찬가지로 기본 주소를 무작위로 지정하면 힙이 손상되고 있지만 문제는 명백하게 드러나지 않습니다 (사물이 약간 잘못 작동 할 수도 있음).

메모리 검사기 또는 디버그 할당자를 사용할 수 있다면 도움이 될 것입니다.

불행히도 코드/추가 정보가 없으면 추가 힌트를 제공하는 것이 매우 어려울 것입니다.