指针可以放在堆内存(C ++)上吗?

tim*_*miz 2 c++ pointers vector heap-memory stack-memory

我写了一些代码,试图在Free store(堆内存)上创建一个指针。我认为这是不可能的,但无论如何我都尽力了。

下面的代码基本上是在堆上创建一个指针向量,然后使向量中的那些指针指向堆上的一些整数。我想知道向量中称为vec的那些指针是否在堆上?我还想知道在使用这样的向量时释放分配的空间的正确方法是什么。最后一条delete语句使程序崩溃,因此我将其注释掉。我不知道是否有内存泄漏。

    vector<int*> *vec = new vector<int*>();
    vec->push_back(new int(1));
    vec->push_back(new int(2));
    vec->push_back(new int(3));
    cout << (*vec)[0] << " " << (*(*(vec))[0]) << endl;
    cout << (*vec)[1] << " " << (*(*(vec))[1]) << endl;
    cout << (*vec)[2] << " " << (*(*(vec))[2]) << endl;
    delete (*vec)[0];
    delete (*vec)[1];
    delete (*vec)[2];
    //delete [] vec;
Run Code Online (Sandbox Code Playgroud)

Mic*_*kis 6

可以在堆中创建任何变量,包括指针。就是说,在C ++级别,您无法控制在何处创建内存。

  • c ++并没有正式的“堆”或“栈”。这些是实施细节。 (4认同)
  • 您的老师可能将情况简化为一个非常常见的情况,即在堆栈上创建一个局部变量而不是包含指向堆的指针(通常是在引入动态内存分配时使用的第一个示例。)人们希望稍后,这个概念将进一步解释。 (4认同)