Problem z Segmentation fault (core dumped) - prośba o pomoc w prostym kodzie

0

Witam, jestem początkującym i nie mogę wyjść z tej sytuacji, kod używa pamięci która nie jest nigdzie zdefiniowana (core dumped). Proszę o pomoc

#include <iostream>
#include <conio.h>
#include <string>
#include <cstdlib>
using namespace std;

  struct pracownicy {
	string imie;
	string nazwisko;
	long long pesel;
	long long wynagrodzenie;
};

int main(){

	pracownicy dane_os[4];
	
	dane_os[0].imie = "Ernest";
	dane_os[0].nazwisko = "Kozikowski";
	dane_os[0].pesel = 99123010511;
	dane_os[0].wynagrodzenie = 4500;
	
	dane_os[1].imie = "Michal";
	dane_os[1].nazwisko = "Bokiniec";
	dane_os[1].pesel = 99123010512;
	dane_os[1].wynagrodzenie = 4600;
	
	dane_os[2].imie = "Aleksandra";
	dane_os[2].nazwisko = "Nowak";
	dane_os[2].pesel = 99123010513;
	dane_os[2].wynagrodzenie = 500;
	
	dane_os[3].imie = "Patrycja";
	dane_os[3].nazwisko = "Wyrobek";
	dane_os[3].pesel = 99123010514;
	dane_os[3].wynagrodzenie = 6000;
	
	dane_os[4].imie = "Dominik";
	dane_os[4].nazwisko = "Nowak";
	dane_os[4].pesel = 99123010515;
	dane_os[4].wynagrodzenie = 5720;
	
	cout << "Imie            " << "Nazwisko          " << "Pesel          " << "   Wynagrodzenie" << endl;
	for(int i = 0 ; i < 4 ; i++){
		cout << dane_os[i].imie << "\t" << dane_os[i].nazwisko << "\t" << dane_os[i].pesel << "\t" << dane_os[i].wynagrodzenie << "\n";
	    }
}
8

pracownicy dane_os[4]; - tablica ilu pracowników?
dane_os[0].imie = "Ernest"; - którego pracownika uzupełniamy?
dane_os[4].imie = "Dominik"; - którego pracownika uzupełniamy?

0

A to nie jest tak ze pamięć jest zawsze liczona od 0, czyli jak chce tablice 5 pracowników to liczymy od 0, czyli 0,1,2,3,4 == 5 pracownikow ?

0

@kq: pracownicy dane_os[5]; zadziałało, dzięki i wybaczcie za kłopot

10

Indeksowana (liczona) jest od zera. Ale wielkość tablicy podajesz dokładnie taką, jakiej oczekujesz. Jak chcesz 5 elementów, to wpisujesz 5.

1

Wszyscy dają rybę zamiast dać wędkę. Problem najprościej rozwiązać korzystając z debugera który albo dokładnie podświetli gdzie jest błąd (Visual Studio C++) lub wyświetli stos wywołań funkcji z bardziej lub mniej dokładną informacją o konkretnej linii gdzie występuję błąd (GDB).

Są też narzędzia w stylu valgrind które dokładnie pokażą np. linie kodu które próbują uzyskać dostęp do niedozwolonych obszarów pamięci itp.

1 użytkowników online, w tym zalogowanych: 0, gości: 1