ошибка времени выполнения в динамически размещаемом массиве для удаления элемента в c ++ - PullRequest
0 голосов
/ 29 января 2019

Я написал программу на C ++ для удаления элемента из динамически размещаемого массива.Я могу видеть массив с удаленным элементом, но после этого он выдает некоторые ошибки, которые я не могу понять.Я включил изображения в ошибку, так как не смог скопировать сообщение об ошибке.Я использую:

Debian 9, 32-битный

Clang компилятора.

IDE code :: blocks.

Код:

#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;
    }
}

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Этот код имеет неопределенное поведение:

 ar[lp3]=ar[lp3+1];

Поскольку lp3 указывает на последний элемент, ar[lp3+1]; выходит за границы.

Также:

ar[arsize]=0;

Пишет вне границ.Максимальный допустимый индекс arsize-1, так как индексирование начинается с нуля.Эта последняя строка портит вашу кучу.

0 голосов
/ 29 января 2019

Вы пытаетесь получить доступ к ar[arsize], которого не существует.

Помните, что массивы C ++ проиндексированы 0.

Поэтому попробуйте ar[arsize-1] вместо

...