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

Błąd - process exited due to signal 6

Object Storage Arubacloud
0 głosów
504 wizyt
pytanie zadane 17 października 2021 w C i C++ przez Xodi Początkujący (260 p.)

W skrócie to dostaje błąd  (process exited due to signal 6).Generalnie taki błąd wyskakuje w momencie, gdy próbuje się odczytać lub zmienić wartość z poza tablicy. Ja jednak takiego problemu się nie doszukałem.

Treść zadania:

Halinka zapisała się do uniwersyteckiego żeńskiego zespołu tanecznego o wdzięcznej nazwie „Bitowianki”. Zespół właśnie przygotowuje nowy występ, gdzie wszystkie tancerki (a jest ich n) ustawione są w szeregu (każda na ustalonym, niezmiennym miejscu). Problemem są kostiumy tańczących dziewcząt: scenograf zażyczył sobie, aby były one białe lub czarne i do tego, aby układ kolorów w szeregu tworzył palindrom. Dla niektórych tancerek kostiumy już są kupione, a reszcie zespołu trzeba je dokupić – tak, aby zminimalizować koszt przygotowania występu (biały i czarny kostium mogą mieć różne ceny). Może się wszelako okazać, że nie da się dobrać odpowiednich kolorów i trzeba będzie wymyślić nową koncepcję występu. Twoim zadaniem jest wyznaczenie minimalnego kosztu zakupu kostiumów lub stwierdzenie, że nie da się uzyskać palindromu w szeregu.

Dane wejściowe Pierwszy wiersz danych wejściowych zawiera trzy liczby naturalne n, a oraz b (1 ¬ n ¬ 1000, 1 ¬ a, b ¬ 100) – odpowiednio: ilość tancerek w zespole, koszt białego oraz koszt czarnego kostiumu. Kolejny wiersz zawiera liczby naturalne k1, k2, . . . , kn równe 0 (jeśli tancerka nie posiada jeszcze kostiumu), 1 (jeśli posiada biały kostium) lub 2 (jeśli posiada czarny kostium). Liczby w wierszu oddzielone są pojedynczymi odstępami.

Wynik programu Program powinien wypisać minimalny koszt zakupu brakujących kostiumów lub słowo NIE, jeśli układ jest niemożliwy.

Przykład Dla danych wejściowych 5 3 4 0 1 0 1 2 prawidłowym wynikiem jest (pierwszej tancerce kupujemy czarny kostium, a trzeciej: biały): 7

 

Naprawdę głowię się nad tym już 4 godzinę i nadal nie mogę znaleźć przyczyny.

 

#include <iostream>

using namespace std;

bool Czy_pali(int tab[],int t ) // sprawdza czy tablica jest palindromem
{
    int i,j;
    for (i = 0, j = t-1; i <t/2; i++, j--)
{
if (tab[i] != tab[j])
break;
}
if (i < j)
return false;
else
return true;
 

}
int cena(int b,int cz){ // typuje niższą cene 
    if(b>cz)
        return 2;
    else 
        return 1;
}


int sum;

int main() {
  int n,a,b;// liczba tancerek,koszt białych strojów,koszt czarnych strojów
  int *tab=new int[n];
  cin >> n;
  cin >> a;
  cin >> b;

  for(int i = 0;i<n;i++){
      cin >> tab[i];
  }
  int j=n-1;
  int i = 0;
  while(i<n/2){ // dla każdego j oraz i równego 0 ustala wartości 1 lub 2
      
      if(tab[i]==0&&tab[j]!=0){ //wstawia w miejsce i j,gdy i=0
        tab[i]=tab[j];
        if(tab[j]==1)// zlicza cene
            sum+=a;
        else
            sum+=b;
        }
        
      else if(tab[j]==0&&tab[i]!=0){ //wstawia w miejsce j i,gdy j=0
        tab[j]=tab[i];
        if(tab[i]==1)//zlicza cene
            sum+=a;
        else
            sum+=b;
        
        }
      else if(tab[i]==0&&tab[j]==0){ //wstawia w miejsce j oraz i oznaczenie tańszego stroju
        tab[i]=cena(a,b);
        tab[j]=cena(a,b);
        if(tab[j]==1) //zlicza cene
            sum+=a*2;
        else
            sum+=b*2;
        }i++;j--;
        
        
  }
  if(tab[n/2]==0){//jeżeli środkowy element tablicy jest równy 0 to przyjmuje tańszą opcję
      tab[n/2]=cena(a,b);
      if(tab[n/2]==1)
            sum+=a;
      else
            sum+=b;
        
  }
  
        
  
  if(Czy_pali(tab,n))// w zależności od tego czy tablica jest palindromem zwraca koszt strojów kupionych
    cout << sum;
  else cout << "NIE";
  delete[]tab;
  
return 0;

}

Dla danych wejściowych 7 5 10 1 2 1 0 0 1 0 prawidłowym wynikiem jest (kostiumy 2. i 6. tancerki psują układ): NIE 

1 odpowiedź

+2 głosów
odpowiedź 17 października 2021 przez draghan VIP (106,230 p.)

W main alokujesz tablicę o rozmiarze `n`, zanim do `n` przypiszesz sensowną wartość. Jeśli nie przypiszesz wartości do zmiennej `n`, dostaniesz w niej śmieci (spróbuj sobie wypisać jej wartość przed alokacją lub podejrzeć debuggerem, wtedy zobaczysz na własne oczy o co mi chodzi).

Krótki wyciąg z dokumentacji:

[in case of non-class, non array type] no initialization is performed: the objects with automatic storage duration (and their subobjects) contain indeterminate values.

[source]

Powinieneś najpierw pobrać `n` (linia 33. w aktualnym kodzie), dopiero w kolejnym kroku alokować tablicę (linia 32. w aktualnym kodzie).

komentarz 17 października 2021 przez Xodi Początkujący (260 p.)
Bardzo dziękuję za odpowiedź,

postaram się wyciągnąć z tego wnioski na przyszłość :)

Podobne pytania

0 głosów
0 odpowiedzi 139 wizyt
pytanie zadane 2 stycznia 2023 w C i C++ przez polandonion Mądrala (7,040 p.)
0 głosów
1 odpowiedź 306 wizyt
pytanie zadane 28 sierpnia 2023 w C i C++ przez Dudziu Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 2,339 wizyt
pytanie zadane 25 marca 2019 w C i C++ przez Lucyfer1234 Początkujący (440 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...