• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C++ codeblocks Process terminated with status -1073741819 (0 minute(s), 10 second(s))

+1 głos
1,204 wizyt
pytanie zadane 23 listopada 2020 w C i C++ przez szymonns Nowicjusz (150 p.)

Witam wszystkich forumowiczów po przerobieniu 14 odcinka kursu C++ Pana Zelenta robiłem prace domową i natrafiłem na taki problem że po skompilowaniu programu program wykonuje się do momentu wywołania funkcji sortuj i potem wyświetla się błąd Process terminated with status -1073741819 (0 minute(s), 10 second(s)) i dalej program się już nie wykonuje. Dodam do tego że jest to sortowanie mergesort. Pod spodem daje kod i źródłówy dziękuje każdemu kto jest chce mi pomóc.

#include <iostream>
#include <time.h>
#include <windows.h>

using namespace std;

int ile;
clock_t start,stop;
double czas;
const int MAX = 100000;

void sortowanie_babelkowe(int *tab, int n)
{
    for(int i=1; i<n; i++)
    {
        for(int j=n-1; j>=1; j--)
        {
            if(tab[j]<tab[j-1])
            {
                int bufor;
                bufor=tab[j-1];
                tab[j-1]=tab[j];
                tab[j]=bufor;
            }
        }
    }
}

void quicksort(int *tablica, int lewy, int prawy)
{
    int v=tablica[(lewy+prawy)/2];
    int i,j,x;
    i=lewy;
    j=prawy;
    do
    {
        while(tablica[i]<v) i++;
        while(tablica[j]>v) j--;
        if(i<=j)
        {
            x=tablica[i];
            tablica[i]=tablica[j];
            tablica[j]=x;
            i++;
            j--;
        }
    }
    while(i<=j);
    if(j>lewy) quicksort(tablica,lewy, j);
    if(i<prawy) quicksort(tablica, i, prawy);
}

void scalaj (double T[], int lewy, int prawy)
{
 int i, i_lewy, i_prawy, srodek;
 double pom[MAX];
 for (i=0;i<MAX;i++) pom[i]=T[i];
 srodek=(lewy+prawy)/2;
 i=lewy;
 i_lewy=lewy;
 i_prawy=srodek+1;
 while (i_lewy<=srodek && i_prawy<=prawy)
 {
  if (pom[i_lewy]<pom[i_prawy])
  {
   T[i]=pom[i_lewy];
   i_lewy++;
  }
  else
  {
   T[i]=pom[i_prawy];
   i_prawy++;
  }
  i++;
 }
 if (i_lewy>srodek)
  while (i_prawy<=prawy)
  {
   T[i]=pom[i_prawy];
   i_prawy++;
   i++;
  }
 else
  while (i_lewy<=srodek)
  {
   T[i]=pom[i_lewy];
   i_lewy++;
   i++;
  }
}

void sortuj (double T[], int lewy, int prawy)
{
 int srodek=(lewy+prawy)/2;
 if (lewy<srodek) sortuj(T,lewy,srodek);
 if (srodek+1<prawy) sortuj(T,srodek+1,prawy);
 scalaj(T,lewy,prawy);
}

int main()
{
    cout << "Porownanie czasow sortowania v.1" << endl;

    cout<<"Ile losowych liczb w tablicy: ";
    cin>>ile;

    //dynamiczna alokacja tablicy
    int *tablica;
    tablica=new int [ile];

    int *tablica2;
    tablica2=new int [ile];

    double *tablica3;
    tablica3=new double [ile];

    //inicjowanie generatora
    srand(time(NULL));

    //wczytywanie losowych liczb do tablicy
    for(int i=0; i<ile; i++)
    {
        tablica[i] = rand()%100000+1;
    }

    //przepisanie tablicy do tablicy2
    for(int i=0; i<ile; i++)
    {
       tablica2[i]=tablica[i];
    }

    //przepisanie tablicy do tablicy3
    for(int i=0; i<ile; i++)
    {
       tablica3[i]=tablica[i];
    }

/*
        cout<<"Przed posortowaniem: "<<endl;
        for(int i=0; i<ile; i++)
        {
            cout<<tablica2[i]<<" ";
        }
*/
    cout<<"Sortuje teraz babelkowo. Prosze czekac!"<<endl;
    start = clock();
    sortowanie_babelkowe(tablica,ile);
    stop = clock();
    czas = (double)(stop-start) / CLOCKS_PER_SEC;
    cout<<endl<<"Czas sortowania babelkowego: "<<czas<<" s"<<endl;

    cout<<endl<<"Sortuje teraz algorytmem quicksort. Prosze czekac!"<<endl;
    start = clock();
    quicksort(tablica2, 0, ile-1);
    stop = clock();
    czas = (double)(stop-start) / CLOCKS_PER_SEC;
    cout<<endl<<"Czas sortowania quicksort: "<<czas<<" s"<<endl;

    cout<<endl<<"Sortuje teraz algorytmem mergesort. Prosze czekac!"<<endl;
    start = clock();
    sortuj(tablica3, 0, ile-1);
    stop = clock();
    czas = (double)(stop-start) / CLOCKS_PER_SEC;
    cout<<endl<<"Czas sortowania mergesort: "<<czas<<" s"<<endl;

/*
       cout<<"Po posortowaniu: "<<endl;
        for(int i=0; i<ile; i++)
        {
            cout<<tablica[i]<<" ";
        }
*/

    delete [] tablica;
    delete [] tablica2;
    delete [] tablica3;

    return 0;
}

1 odpowiedź

0 głosów
odpowiedź 23 listopada 2020 przez TOM_CPP Pasjonat (22,640 p.)

Problem jest w linijce

for (i=0;i<MAX;i++) pom[i]=T[i];

gdzie liczba MAX jest większa od rozmiaru tablicy T dla wszystkich przypadków, w których użytkownik wpisze liczbę mniejszą od 100000.

 

komentarz 23 listopada 2020 przez szymonns Nowicjusz (150 p.)
ok, czyli wystarczy odwrócić znam większości.
komentarz 23 listopada 2020 przez szymonns Nowicjusz (150 p.)
Sorki żle cię zrozumiałem, po prostu MAX to była zbyt duża wartość i wystarczyło zmienić MAX na ile i program śmiaga. Ale dzięki ci za pomoc bo dzięki tobie zrozumiałem że trzeba przy tym MAX szukać błędu.

Podobne pytania

0 głosów
0 odpowiedzi 790 wizyt
0 głosów
2 odpowiedzi 1,182 wizyt
0 głosów
1 odpowiedź 410 wizyt

93,757 zapytań

142,716 odpowiedzi

323,363 komentarzy

63,353 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...