2017-10-13 3 views
0

하나의 클래스 메소드의 if 문은 두 개의 배열이 입력에 종속적인데, 내 경우에는 True가 아니 었습니다. 따라서 필자의 경우이 두 배열은 절대로 할당되지 않습니다. 그러나이 클래스의 소멸자는이 두 [할당되지 않은] 배열을 삭제합니다.impi 라이브러리로 할당되지 않은 메모리를 삭제할 때 버그가 발생했습니다.

나는 impi 라이브러리를 사용하기 시작할 때를 제외하고는 다른 MPI 라이브러리와 C++ 컴파일러를 사용하여이 코드 (C++ MPI + OpenMP 기반)에 어떤 오류도 없었습니다.

는 코드는 끝에 도달 한 후 나는이 버그를 수정 종료 코드 중 6 또는 11

와 메시지 "응용 프로그램 프로세스 중 하나의 BAD 해지"를 던졌습니다 때까지 확인을 실행,하지만 지금은되었다 필자는 impi에서 왜 이런 일이 발생하는지 그리고 할당되지 않은 배열을 가장 안전한 방법으로 삭제할 수 있는지 궁금합니다.

+3

우리가 한 일에 대한 설명보다는 코드를 볼 수 있습니까? https://stackoverflow.com/help/mcve를 참조하십시오. – orhtej2

답변

1

어떻게 할당되지 않은 배열을 가장 안전한 방법으로 삭제할 수 있습니까?

항상 변수를 초기화하십시오. 이 경우 나중에 delete에 전달하는 것이 안전합니다 nullptr와 포인터를 초기화 :

sometype *pointer = nullptr; 
if(condition) { 
    pointer = new sometype[size]; 
    // dealing with it 
} 
... 
delete [] pointer; 

하지만 더 나은이 std::unique_ptr 또는 제대로 initailized 기본된다 std::shared_ptr 및 관리 메모리를 사용 할 수 있습니다.

관련 문제