簡體   English   中英

動態分配數組中的運行時錯誤以刪除 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]代替

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM