首页 > 解决方案 > 动态分配内存和分配单个数组值

问题描述

int main()
{
    int *dizi = new int[3];
    int *ptr = new int;
    *dizi = 1;
    *(dizi + 1) = 2;
    *(dizi + 2) = 3;
    ptr = (dizi + 2);
    delete ptr;
    for (int i = 0; i < 2; i++)
    {
        cout << *(dizi + i) << endl;
    }
    delete[] dizi;
}

我想返回dizi[2]值但我不能,它只是崩溃了我该怎么做,你能给我一个例子吗?

标签: c++memorymemory-managementconsoledynamic-memory-allocation

解决方案


尝试删除ptr与尝试删除相同,dizi[2]因为您可以在评论部分阅读delete必须在返回的地址中使用new. 您的程序的行为是未定义的。

您也有内存泄漏,ptr当您重新分配时,分配和分配的内存将无法访问ptr


如果你想评估你的价值,你dizi + 2需要ptr

//...
int *ptr = new int;
*ptr = dizi[2]; // or *(dizi + 2);
std::cout << *ptr; // use it
delete ptr; // delete if after use
//...

另一方面,如果您的意图是分配dizi + 2(或&dizi[2])到ptr,则不需要内存分配,因为ptr您可以直接进行分配:

//...
int *ptr = dizi + 2;
std::cout << *ptr;
//...

请注意,在这种情况下,删除数组后,ptr它会变得悬空,当它指向dizi + 2.



推荐阅读