如何解决动态分配内存和分配单个数组值
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 + 2
的 value 赋值给 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 举报,一经查实,本站将立刻删除。