c++ - 动态分配内存和分配单个数组值
问题描述
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
必须在返回的地址中使用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
.
推荐阅读
- flutter - 参数类型'List
功能(列表 ?, 列表 ?)' 不能分配给 'List 功能(列表 , 列表 )' - node.js - Twilio用nodejs发送短信不发送消息
- javascript - 相对于自身大小的偏移 svg 路径元素
- apache-spark - Pyspark 窗口函数,具有对旅行者数量进行取整的条件
- javascript - 如何使用 Javascript Apache 删除 excel 文件表单服务器
- python - Selenium for Python 附加到当前会话,但不加载 Chrome 配置文件
- android - 无法解决此问题?得到错误吐司“无法访问相机”Kotlin -Android
- sql - 有没有办法检查 PowerBI DAX Studio 或 SSIS 中是否存在度量中的 DAX 表达式的子字符串?
- python - 使用 Svg 路径渲染 Svg
- xml - 如何使用 serde-xml-rs 混合元素和未标记文本来解析 XML?