动态分配数组中的运行时错误,用于删除 C++ 中的元素
run time error in dynamically allocated array to delete an element in c++
我用C++编写了一个程序来删除动态分配的数组中的元素。我可以看到带有已删除元素的数组,但在那之后,它会产生一些我无法理解的错误。我已将图像包含在错误中,因为我无法复制错误消息。我正在使用:
Debian 9,32 位
编译器叮当声。
IDE代码::块。
代码:
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
int *ar,arsize,lp1,lp2,lp3,lp4,ele,pos;
ar=nullptr;
cout<<"enter the size of array to be created:- "; cin>>arsize;
ar=new int[arsize];
if(!ar)
{
cout<<"Aborting";
exit(1);
}
else
{
cout<<"enter the elements for array:- ";
for(lp1=0;lp1<arsize;lp1++)
{
cin>>ar[lp1];
}
cout<<"Enter element to be deleted:- "; cin>>ele;
for(lp2=0;lp2<arsize;lp2++)
{
if(ar[lp2]==ele)
{
ar[lp2]=0;
pos=lp2;
break;
}
}
for(lp3=pos;lp3<arsize;lp3++)
{
ar[lp3]=ar[lp3+1];
}
ar[arsize]=0;
cout<<"new array is:-"<<endl;
for(lp4=0;lp4<arsize-1;lp4++)
{
cout<<"t"<<ar[lp4]<<endl;
}
delete[]ar;
return 0;
}
}
此代码具有未定义的行为:
ar[lp3]=ar[lp3+1];
由于lp3
指向最后一个元素,因此ar[lp3+1];
超出范围。
也:
ar[arsize]=0;
越界写入。最大有效索引是arsize-1
,因为索引从零开始。最后一行会损坏您的堆。
您正在尝试访问不存在的ar[arsize]
。
请记住,C++数组的索引为 0。
所以试试ar[arsize-1]
相关文章:
- 将数组的地址分配给变量并删除
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C/C++编译器通常会删除重复的库吗
- 从链接列表c++中删除一个项目
- C++如何通过用户输入删除列表元素
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 使用函数"remove"删除重复元素
- 如何从多映射中删除特定的重复项
- 运算符C++ "delete []"仅删除 2 个前值
- 删除指向指针的指针是运行时错误吗
- 将指针设置为"nullptr"并不能防止双重删除?
- 为什么示例代码访问IUnknown中已删除的内存
- 如何通过 getter 函数删除矢量的元素?
- 从控制台中删除最后打印的元素
- C++中的线程安全删除
- 如何从存储在std::映射中的std::集中删除元素
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数