소프트웨어 회의에서 논의한 바에 따르면 동적으로 할당 된 프리미티브 배열을 일반 delete
으로 삭제하면 메모리 누수가 발생하는지 알아보기 위해 알아 보았습니다.delete p입니까? p는 배열에 대한 포인터입니다. 항상 메모리 누수가 있습니까?
: 작업 관리자는 놀라 울 정도로 메모리가 할당 된 올바르게 해제하여 내 응용 프로그램의 메모리 사용량을 모니터링 I보다
#include "stdafx.h"
#include "Windows.h"
const unsigned long BLOCK_SIZE = 1024*100000;
int _tmain()
{
for (unsigned int i =0; i < 1024*1000; i++)
{
int* p = new int[1024*100000];
for (int j =0;j<BLOCK_SIZE;j++) p[j]= j % 2;
Sleep(1000);
delete p;
}
}
#include "stdafx.h"
#include "Windows.h"
struct aStruct
{
aStruct() : i(1), j(0) {}
int i;
char j;
} NonePrimitive;
const unsigned long BLOCK_SIZE = 1024*100000;
int _tmain()
{
for (unsigned int i =0; i < 1024*100000; i++)
{
aStruct* p = new aStruct[1024*100000];
Sleep(1000);
delete p;
}
}
: 할당 된 메모리는 꾸준히 '비 원시적 형태의 배열을 할당하는 내 테스트 프로그램을 수정 한
예상대로 증가하지 않았다
10 분 동안 실행 한 후 의미있는 메모리 증가 없음
경고 수준 4로 프로젝트를 컴파일하고 경고가 표시되지 않았습니다.
Visual Studio 런타임에서 할당 된 개체 유형을 추적 할 수 있으므로 해당 환경에 delete
과 사이에 차이가 없습니까?
중복? http://stackoverflow.com/questions/1913343/how-could-pairing-new-with-delete-possibly-lead-to-memory-leak-only –
@Philip Potter : 그다지 질문하지 - 그 중 하나는 구체적입니다. 메모리 누출의 원인. 그리고 메모리 누출은 전형적인 경우가 아닙니다. – sharptooth
'shared_ptr'의 배열을 사용해보십시오. 각 배열은 서로 다른 할당 된 int를 가리키고 있습니다. 구현이'delete'와'delete []'를 동일하게 만들고 있는지 알 수 있습니다. 사람들이 알고있는 것들로 C++에서 항상이 매혹은 틀렸다고 분명하게 표준에 명시되어 있지만 때로는 그냥 일하는 것처럼 보입니다 .-) –