메모리를 목록에 할당하는 방법은 무엇입니까? 다음 코드에서는 목록을 지우고 포인터를 목록에 삭제 한 후에도 메모리를 해제하지 않습니다. 시스템 모니터에서 프로그램이 가져온 메모리를 볼 수 있습니다. 목록에 할당 된 메모리를 효율적으로 삭제할 수 있습니까?목록에 할당 된 메모리를 해제하는 방법은 무엇입니까?
struct Plot
{
int BUFFER[65535];
int BUFFER1[65535];
int BUFFER2[65535];
int BUFFER3[65535];
int BUFFER4[65535];
};
int main(int argc, char *argv[])
{
std::list<Plot> *LIST= new std::list<Plot>();
Plot PLOT;
int i=0;
while(i<1500)
{
(LIST)->push_back(PLOT);
i++;
usleep(100);
}
LIST->clear();
delete LIST;
while(1)
{
usleep(100);
}
}
할당 된 메모리가 올바르게 해제되고 누출이 없습니다. C++ 라이브러리의 내부가 많은 것을 숨기기 때문에 시스템 모니터에 의존 할 수 없습니다. 예를 들어 해제 된 메모리가 시스템에 즉시 반환되지 않을 수도 있지만 라이브러리는 자신의 사용 가능한 메모리 풀에 넣을 수 있습니다. 시스템에서 직접 메모리를 요청하는 대신 해당 풀에서 후속 할당을 수행하십시오. 완전히 구현에 의존합니다. –
메모리 관리가 까다로운 경우 사용자 지정 할당 기 사용을 고려하십시오. –
이것은 샘플 코드 일뿐입니다. 메모리가 무한대로 증가하는 비슷한 코드를 사용했습니다. Valgring은 새로운 연산자에서 메모리 누수도 표시합니다. –