• 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

0 głosów
755 wizyt
pytanie zadane 17 października 2021 w C i C++ przez Xodi Początkujący (280 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 (280 p.)
Bardzo dziękuję za odpowiedź,

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

Podobne pytania

0 głosów
0 odpowiedzi 324 wizyt
pytanie zadane 2 stycznia 2023 w C i C++ przez polandonion Dyskutant (7,630 p.)
0 głosów
1 odpowiedź 628 wizyt
pytanie zadane 28 sierpnia 2023 w C i C++ przez Dudziu Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 2,807 wizyt
pytanie zadane 25 marca 2019 w C i C++ przez Lucyfer1234 Początkujący (440 p.)

93,425 zapytań

142,421 odpowiedzi

322,646 komentarzy

62,785 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...