第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

合并排序代碼中的分段錯(cuò)誤

合并排序代碼中的分段錯(cuò)誤

慕妹3242003 2021-04-09 16:14:28
我已經(jīng)用C ++編寫了此合并排序程序,但是在運(yùn)行代碼后出現(xiàn)“分段錯(cuò)誤(內(nèi)核已轉(zhuǎn)儲(chǔ))”錯(cuò)誤。即使沒(méi)有編譯錯(cuò)誤。您能告訴我我在做什么錯(cuò)嗎?在數(shù)組中輸入數(shù)據(jù)時(shí),它顯示該錯(cuò)誤。如果我將其更改為push_back,則輸入很好,但是稍后在合并功能中,它顯示相同的錯(cuò)誤。//merging 2 sorted subarrays.#include <iostream>#include <vector>using namespace std;void merge(vector <int> &a,vector <int> &b,vector <int> &c){    int i=0,j=0,k=0,bL=b.size(),cL=c.size();    while(i<bL && j<cL)    {        if(b[i]<c[j])        {            a[k]=b[i];            i++;k++;        }        else        {            a[k]=c[j];            j++;k++;        }    }    while(i<bL)    {        a[k]=b[i];        i++;k++;    }    while(j<cL)    {        a[k]=c[j];        j++;k++;    }    cout<<"array a inside merge is: "<<endl;    for(int p=0;p<a.size();p++)    {        cout<<a[p]<<endl;    }}void mergeSort(vector <int> &a){    vector <int> l, r;    int mid;    if(a.size()<2) return;    mid = a.size()/2;    for(int i=0;i<mid;i++)    {        l[i]=a[i];    }    for(int i=mid;i<a.size();i++)    {        r[i-mid]=a[i];    }    mergeSort(l);    mergeSort(r);    merge(a, l, r);}int main(){    int n;    vector <int> a;    cin>>n;    for(int i=0;i<n;i++)    {        cin>>a[i];    }    mergeSort(a);    for(int p=0;p<n;p++)    {        cout<<a[p]<<endl;    }    return 0;}
查看完整描述

3 回答

?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

如果您使用向量訪問(wèn)向量中的元素,則[]可能會(huì)遇到段錯(cuò)誤。這段代碼,

vector <int> a;

給你一個(gè)空向量。

a[0]如果什么都沒(méi)有,問(wèn)問(wèn)就行不通a。嘗試將其設(shè)置a[0]為一個(gè)值也不起作用。它不存在。然而。

您在mergeSort使用時(shí)遇到類似的問(wèn)題

vector <int> l, r;

這些也是空向量。

您可以使用push_back(甚至emplace_back)添加新元素?;蚴褂脴?gòu)造函數(shù)重載來(lái)聲明所需的元素?cái)?shù)量。例如,

vector <int> a(10);

給您一個(gè)十個(gè)整數(shù)的向量,因此a[0]可以讀取或?qū)懭搿?nbsp;a[11]不是。

首先練習(xí)使用向量,然后嘗試合并排序。


查看完整回答
反對(duì) 回復(fù) 2021-04-16
?
繁星點(diǎn)點(diǎn)滴滴

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊

出現(xiàn)分段錯(cuò)誤的原因是您訪問(wèn)了不存在的內(nèi)存位置(更準(zhǔn)確地說(shuō)是未分配)。假設(shè)您有一個(gè)長(zhǎng)度為3的向量,并且嘗試訪問(wèn)第4個(gè)位置,則會(huì)遇到分割錯(cuò)誤。


與@doctorlove的答案相反,我想說(shuō)可以使用[]。但是,您需要以下實(shí)現(xiàn)(僅針對(duì)main(),請(qǐng)?jiān)谄渌δ苤幸韵嗤倪壿媽?shí)現(xiàn))。有關(guān)std::vector更多信息,請(qǐng)參見(jiàn)的文檔。


int main()

{

    size_t n;


    std::cin >> n;

    std::vector <int> a(n);


    for(int i=0;i<n;++i)

    {

        std::cin >> a[i];

    }


    // mergeSort(a);


    for(int i=0;i<n;++i)

    {

        std::cout << a[i] << "\n";

    }

    return 0;

}

希望這可以幫助。干杯。


查看完整回答
反對(duì) 回復(fù) 2021-04-16
?
富國(guó)滬深

TA貢獻(xiàn)1790條經(jīng)驗(yàn) 獲得超9個(gè)贊

這是更改后的最終代碼:


//merging 2 sorted subarrays.

#include <iostream>

#include <vector>

using namespace std;


void merge(vector <int> &a,vector <int> &b,vector <int> &c)

{

    int i=0,j=0,k=0,bL=b.size(),cL=c.size();

    while(i<bL && j<cL)

    {

      if(b[i]<c[j])

      {

        a[k]=b[i];

        i++;k++;

      }

      else

      {

        a[k]=c[j];

        j++;k++;

      }

    }

    while(i<bL)

    {

      a[k]=b[i];

      i++;k++;

    }

    while(j<cL)

    {

      a[k]=c[j];

      j++;k++;

    }

    cout<<"array a inside merge is: "<<endl;

    for(int p=0;p<a.size();p++)

    {

      cout<<a[p]<<endl;

    }


}

void mergeSort(vector <int> &a)

{

    vector <int> l, r;

    int mid;

    if(a.size()<2) return;


    mid = a.size()/2;

    for(int i=0;i<mid;i++)

    {

      l.push_back(a[i]);

    }


    //change2

    for(int i=0;i<a.size()-mid;i++)

    {

      r.push_back(a[mid+i]);

    }

    mergeSort(l);

    mergeSort(r);

    merge(a, l, r);

}

int main()

{

    int n;

    cin>>n;


    //change1

    vector <int> a(n);

    for(int i=0;i<n;i++)

    {

      cin>>a[i];

    }

    mergeSort(a);

    cout<<"Final array is:"<<endl;

    for(int p=0;p<n;p++)

    {

      cout<<a[p]<<endl;

    }

    return 0;

}


查看完整回答
反對(duì) 回復(fù) 2021-04-16
  • 3 回答
  • 0 關(guān)注
  • 324 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)