2011-10-06 3 views
1

난 그냥 코드삭제하는 동안 허위 _BLOCK_TYPE_IS_VALID 어설 션 오류를 제거하는 방법은 무엇입니까?

TEnviron * fk = new TEnviron(); 
delete fk; 

이 _CrtIsValidHeapPointer에서 어설 션 실패 오류 _BLOCK_TYPE_IS_VALID을 던져 두 라인, 디버그 모드에서 내 비주얼 C++ 프로젝트를 구축합니다. 그것에 대한 의견은 실패 있도록 TEnviron 내 메인 프로그램과 다른 DLL에서입니다

Verify pointer is not only a valid pointer but also that it is from the 'local' heap. 

을 말한다. 필자는 소프트웨어에서 "실제"메모리 손상을 식별 할 필사적 인 필요성 때문에 손상을 잡을 수있는 희망으로 디버그 빌드를 사용하게되었지만 가짜 노이즈를 발생시키고이를 넘어서게하지 않을 것입니다. 성명서. 남자가 delete 문을 쓸 수 없습니까? 해고되기 전에 도와주세요.

답변

1

MSVC에 관해서는 개인적으로 해당 DLL에서만 가져온 클래스의 개체를 만들고 삭제합니다. 따라서 DLL은 항상 힙이 아니라 DLL의 힙에 존재합니다. 나는 한 쌍의 정적 함수를 사용하여 create/destroy를한다. 이렇게하면 어디서든 안전하게 개체를 만들고 삭제할 수 있습니다. 어쩌면 이것이 최고의 해결책은 아니지만 문제를 해결할 것입니다.

관련 문제