2012-04-30 3 views
0

많은 메모리 누수 문제가 있습니다.C++ CRT 메모리 누수

char *cmd = new char[128]; 

어떻게해야합니까 :

CRT 예를 들어 다음 코드 누출을 보여줍니다?

char *cmd = new char[128]; 
delete[] cmd; 

위의 코드를 사용하여 VLD (Visual Leak Debugger)로 새 프로젝트를 시작했는데 여전히 누출되었다고합니다.

+0

물론 나는 모든 – Hakon89

+0

후이 참조하면 호출''[] 삭제를 삭제 하시겠습니까? – EdChum

+1

@keety 나는 delete [] * cmd라고 생각한다. –

답변

3

기본적으로 메모리 사용을 중지하자마자 메모리를 해제해야합니다.

자동화를위한 좋은 C++ 기술은 RAIIsmart pointers입니다.

위키 백과 문서를 memory leaks에서도 생각해보십시오. 당신은 배열을 할 수 있습니다 메모리 누수를 방지하기 위해 delete[] arrayVariable;하지 delete arrayVariable;를 호출해야

+0

감사합니다. 전에 읽었지만 여전히 문제가 무엇인지 모르겠군요. – Hakon89

+0

@ Hakon89 문제는 메모리가 시스템에 회수되지 않는다는 것입니다. 'delete' 연산자를 통해 더 이상 사용하지 않는 리소스를 반환해야합니다. 그렇지 않으면 프로그램과 OS가 좋지 않을 것입니다. – ulidtko

0

.

+0

예, 삭제하는 대신 []을 삭제합니다. – Hakon89

0

누출 감지가 실행 된 후 개체가 삭제 될 수 있습니다. 정적 객체가있는 경우

는 예를 들어, 당신은 누수 탐지가 발생하기 전에 삭제가 이루어 지도록 삭제 순서에주의해야합니다.

함수에 새/삭제를 포함시키고 누수가보고되는지 확인하십시오. 그렇지 않으면 누수 탐지가 실행 된 후에 삭제되는 객체와 관련된 문제 일 수 있습니다.

0

사용 : 당신이 문자에 액세스해야 할 때마다

std::vector<char> cmd(128); 

* 당신이 할 수있는 버퍼 : 메모리와 같은

char* memory = &char[0]는 표준 : : 벡터 계속 될 보장됩니다. 개체가 메모리를 소유하고 있으므로 삭제할 필요가 없습니다. 이렇게하면 코드도 예외적으로 안전합니다. e, g, 삭제하기 전에 예외가 발생하는 경우 메모리가 누출되지 않습니다.

또한 C++ 11의 새로운 std :: array를 사용할 수도 있습니다 당신은 스택에 할당 할 수도 경우