2016-10-06 3 views
0

많은 경우에 함수에서 포인터를 동적으로 선언합니다. 함수 반환시 메모리를 나중에 사용하기 때문에 메모리를 해제하지 않으려합니다.동적 메모리를 추적 할 수 있습니까?

동적 포인터를 반환하고 나중에 해제 할 수 있습니다. 그 기억을 추적 할 방법을 찾았습니다.

#include <iostream> 

int foo() 
{ 
    int* pInt = new int(77); 
    int x = (int)pInt; 
    std::cout << std::hex << x << std::endl; // 3831d8 
    return x; 
} 


int main() 
{ 

    int* pLostMem = (int*)foo(); 

    std::cout << pLostMem << std::endl; // 003831D8 
    std::cout << std::dec << *pLostMem << std::endl; // 77 

    if(pLostMem) 
    { 
     delete pLostMem; 
     pLostMem = NULL; 
    } 

    std::cout << std::endl; 
    return 0; 
} 
+0

구체적으로 궁금하신 점은 무엇입니까? – Carcigenicate

+0

표준 C++에서 실제로 메모리를 추적하는 것 외에는 메모리 할당을 추적 할 방법이 없습니다. 나중에 필요한 메모리를 할당 한 경우 *** 포인터를 해당 메모리로 반환하십시오. 포인터를 가질 수없는'int'를 반환하지 마십시오. –

+2

C++ 표준 라이브러리의 [스마트 포인터] (http://en.cppreference.com/w/cpp/memory)가 이에 해당합니다. –

답변

0

그것은 당신의 문제가 완전히 명확하지 않다,하지만 당신은 단지 포인터의 값을 표시하는 코드에 cout 문을 추가하려는 경우, 당신이 할 수 int에 캐스팅없이 : 좋은 일이 있다는 것입니다. 포인터는 잘 인쇄 할 수 있습니다 :

#include <iostream> 

int *foo() 
{ 
    int* pInt = new int(77); 
    std::cout << pInt << std::endl; // pointers can be output just fine 
    return pInt; 
} 

int main() 
{ 
    int* pLostMem = foo(); 

    std::cout << pLostMem << std::endl; // e.g. 0x16c2010 
    std::cout << *pLostMem << std::endl; // 77 

    delete pLostMem; 
    pLostMem = NULL; 

    std::cout << std::endl; 
    return 0; 
} 

Live example here.

또한 don't needif (pLostMem==NULL) 확인을 삭제하기 전에.

+0

'if (pLostMem)'이 중복됩니다. –

+0

@George 어디 구체적으로 ?? –

+0

@ πάνταῥεῖ 예, 정말로 제거됩니다. – mindriot

관련 문제