C++ 在C+;中对数组调用时删除运算符行为+;?
我有以下代码行 代码示例1C++ 在C+;中对数组调用时删除运算符行为+;?,c++,visual-c++,C++,Visual C++,我有以下代码行 代码示例1 char * arr = new char[10]; arr++; delete arr; 代码示例2 char * arr = new char[10]; delete arr; 我有两个示例代码。代码示例1在删除时崩溃,而代码示例2工作正常。只有arr++的区别。这两个代码示例中到底发生了什么。有人能解释一下吗?不可能删除单个元素,因为必须使用delete删除分配的相同内存 它正在崩溃,因为new返回的指针必须与调用delete时使用的指针相同 递增指针并使用
char * arr = new char[10];
arr++;
delete arr;
代码示例2
char * arr = new char[10];
delete arr;
我有两个示例代码。代码示例1在删除时崩溃,而代码示例2工作正常。只有arr++的区别。这两个代码示例中到底发生了什么。有人能解释一下吗?不可能删除单个元素,因为必须使用
delete
删除分配的相同内存
它正在崩溃,因为new
返回的指针必须与调用delete
时使用的指针相同
递增指针并使用它意味着程序不再看到其他簿记信息(可能存储在new
返回的指针之前)
此外,还应使用delete[]
删除数组。因此,以下是未定义的行为:
char * arr = new char[10];
delete arr;
应该是:
char * arr = new char[10];
delete[] arr;
C++不支持删除数组中的元素,因为C数组是保留的连续内存块。你可能正在寻找 使用它们,您可以执行以下操作:(从链接修改示例代码)
#包括
#包括
int main()
{
//创建包含整数的向量
向量v={7,5,16,8,6,3,5,6};
//向向量中再添加两个整数
v、 推回(25);
v、 推回(13);
//迭代并打印向量的值
对于(整数n:v){
std::cout删除分配数组的正确方法
char*arr=新字符[10];
删除[]arr
//执行此操作时,一个元素不会被删除,并会导致泄漏
char * arr = new char[10];
arr++
delete[] arr;
你不能删除单个数组元素。这不是Python。C++没有“删除数组元素”之类的东西,除非那个元素本身是指向新的ED内存的指针(然后数组仍然包含一个悬空指针)。。您想在这里发生什么?运算符delete
的操作数必须是new
表达式的结果,否则行为未定义。arr
使用new
表达式初始化。递增后,其值不再是new
表达式的结果。因此,行为我们的代码未定义。std::vector
支持添加和删除单个元素。这两个元素都在我的计算机上崩溃,因为它们都有错误。第二个元素应该是delete[]C++编译器每次都使用新的.@ DigvijayaPall来创建哪些数据,编译器最多只能从地址知道大小,但有时我会为数组存储额外的信息。当删除ARR时,它会是内存泄漏吗?@ DigvijayPayl是未定义的行为。因此,任何事情都可能发生。ating系统负责提供内存,它肯定会被取消分配最初未分配的内容的请求弄糊涂。看看。每本书都添加了一层,直到最后你可以直接参考。我还没有通读标准。我发现比标准更容易阅读。
char * arr = new char[10];
arr++
delete[] arr;