2010-04-30 3 views
0

나는 루프 내에서 다음 줄이있는 경우 :C++ 포인터 간단한 질문

Type *unite = new Type(newSize); 

아니면 내부 연산자를 삭제하지 않은 경우 메모리에 어떤 문제의 행동이 무엇인지

double *array= new double[anySize]; 

그것? 그것은 서로 다른 메모리 위치에 객체와 배열을 지속적으로 할당 할 것이므로 메모리 누수가 발생합니까?

답변

12

예.

for (int i = 0; i < 10; ++i) 
{ 
    Type* unite = new Type(newSize); 
} 

은 모두 다른 위치에 Type 유형의 개체 10 개를 할당합니다. 그들 중 어느 것도 할당 해제되지 않을 것이고 결국에는 그들 중 하나에 대한 포인터가 없을 것입니다. 10 * sizeof(Type) 바이트의 메모리가 누출됩니다. 마찬가지로

, 같은 이유로 본

for (int i = 0; i < 10; ++i) 
{ 
    double *array= new double[anySize]; 
} 

뜻 메모리 10 * anySize * sizeof(double) 바이트 누출.

+0

작은 세부 사항이지만 '10 * anySize * sizeof (double) + c'와 같이 배열 할당을위한 일정한 공간 오버 헤드가 없어야합니까? –

+0

배열의 크기 정보를 저장하기 위해 구현을 과도하게 할당 할 필요는 없습니다. 예를 들어 배열 크기 데이터가 할당의 유무에 관계없이 존재할 수있는 테이블에 저장 될 수 있습니다. 그래서 여러분이 흘린 오버 헤드가 누출 될 것이라는 것은 맞지만, 얼마나 많은 양 (심지어 + + c라고 말하는 일반적인 것조차도)은 오버 헤드가 할당과 함께 'O (n)'증가한다는 것을 의미하기 때문에 불가능합니다. 이것은 반드시 모든 구현에 적용되는 방식으로 이루어져야합니다. –

1

다른 메모리 위치에 끊임없이 개체와 배열을 할당하므로 메모리 누수가 발생합니까?

for (;x;x) { double *ptr = new double[42]; } 

는 그 다음 대답은 '예, 메모리가 유출되어

가정이를 의미한다.