未分配被释放的指针
Pointer being freed was not allocated?
请告诉我第三行在做什么。
int main(){
int *p = new int[3];
*p++=0; // What's this line doing?
delete p;
return 0;
}
*p++=0;
的意思是:
- 将
sizeof(int)
的零字节写入p
中存储的地址 - 将
p
的值增加sizeof(int)
换句话说,您已经增加了指针,然后传递给delete
的内容与操作符new[]
返回的内容不同。
正如@FredLarson也提到的,你必须使用delete [] p;
来删除一个数组。
另外,我建议你仔细阅读指针、指针算术和前后递增。从我们的c++图书指南和列表中选择一本书
数组中的第一个元素被设置为0,并且p超前1以指向第二个元素。
delete p; // this has undefined behaviour
使用delete [] p;
代替。
将p[0]设置为0,并将指针移动到p[1]。你想干什么?
相关文章:
- 正在理解智能指针,但出现错误:未分配正在释放的指针
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 如何在向量中释放指针?
- 在C++中释放内存期间,迭代器与指针有何不同
- 包含矢量指针的结构的内存释放问题
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 给定一个指向堆分配内存的指针,智能指针实现如何为其找到合适的释放函数?
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 我是否需要在 c++ 中从本地指针中释放分配的内存?
- 未分配释放C++(C 字符串)指针
- 未分配被释放的指针(将堆栈实现为链表时)
- Unique_ptr:在列表中放置时未分配释放的指针
- 释放 std::vector 中指针内存的最有效方法是什么?
- 使用删除与智能指针释放内存以及释放内存的正确方法
- 类析构函数和指针释放
- 使用指向数组元素的指针释放内存
- 使用指针算术和指向该结构的元素的指针释放该结构
- 类中的指针/释放内存
- 矩阵指针释放问题
- 从不同类型的指针释放内存是否安全