【问题标题】:Dynamically allocating memory and assigning of individual array values动态分配内存并分配单个数组值
【发布时间】:2021-07-14 12:16:52
【问题描述】:
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] 值但我不能,它只是崩溃了我该怎么做,你能给我一个例子吗?

【问题讨论】:

  • delete ptrnew[] 未返回的内存地址上被调用。那是未定义的行为ptr 在这段代码中完全没用,应该完全删除。
  • 如果你的意思是要从数组中删除一个元素,答案是不可能的。

标签: c++ memory memory-management console dynamic-memory-allocation


【解决方案1】:

尝试删除ptr 与尝试删除dizi[2] 相同,您可以在评论部分delete must be used in an address returned by 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(或&amp;dizi[2])分配给ptr,则不需要为ptr 分配内存,您可以直接进行分配:

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

请注意,在这种情况下,删除数组后,ptr 变为悬空状态,当它指向dizi + 2 时,您不能再使用它。


【讨论】:

    猜你喜欢
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2021-10-22
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多