我可以追踪动态记忆吗?

时间:2016-10-06 13:14:34

标签: c++ pointers

在许多情况下,我们在函数中动态声明一个指针,有时我们不想在函数返回时释放该内存,因为我们以后需要该内存。

我们可以返回该动态指针,然后释放它。我找到了一些跟踪记忆的方法。这是件好事:

#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;
}

1 个答案:

答案 0 :(得分:0)

在您的问题中并不完全清楚,但如果您只想在代码中添加cout语句以显示指针的值,则可以在不转换为{{1}的情况下执行此操作}。指针可以打印得很好:

int

Live example here.

在删除之前,您还don't need #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; } 检查。