微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

动态分配内存和分配单个数组值

如何解决动态分配内存和分配单个数组值

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] 值但我不能,它只是崩溃了我该怎么做,你能举个例子吗?

解决方法

尝试删除 ptr 与尝试删除 dizi[2] 相同,您可以在评论部分 delete must be used in an address returned by new 中看到。您程序的行为未定义。

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


如果您想将 dizi + 2value 赋值给 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 时,您不能再使用它。


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。