Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+;中对数组调用时删除运算符行为+;?_C++_Visual C++ - Fatal编程技术网

C++ 在C+;中对数组调用时删除运算符行为+;?

C++ 在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时使用的指针相同 递增指针并使用

我有以下代码行

代码示例1

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;