C++ program przestał działać

0

Hej, robię projekt i napotkałem na problem. Program przestaje działać na linijce opisanej poniżej.

//main.cpp
int main()
{
load();
return 0;
}

//lista.h
class Lista
{
public:
Lista(const char* nazwa, const char* producent, char* index); //oczywiście w oddzielnym pliku mam definicje konstruktorów i destruktorów
~Lista();

protected:
char* nazwa;
char* producent;
char* index;
}

//load.cpp
#include <vector>
#include <iostream>
#include <fstream>
#include <sstream>

using namespace std;

vector <Lista> produkty;

void load()
{
char nazwa[25], producent[25], index[2];
ifstream file;
file.open("open.txt");
if(file)
{
while(!file.eof())
{
file>>nazwa>>producent>>index;
produkty.push_back(Lista(nazwa,producent,index); //problem pojawia się tutaj, gdy wykomentuję tę linijkę program działa
}
file.close();
}
}

Program się kompiluje. Specjalnie napisałem tu tylko fragmenty programu, bo za dużo by to zajęło. Pominąłem oczywiste rzeczy typu nagłówki.

1

No i co ci mamy zrobić? Współczuć? Uruchom program pod debugerem i rób step by step aż zobaczysz gdzie jest błąd.

0

Ja wiem, że błąd leży w miejscu gdzie dodaję dane do tablicy vector'ów z pliku. Gdzieś znalazłem taki zapis i jak to napisałem to program przestaje działać.

1

@domin1992 było tu juz sporo takich co "wiedziało", a potem sie okazywało że debuger mówił co innego. Szczgólnie w języku takim jak C++. Zamiast "wiedzieć" sprawdź. Odpal debuger i już. To az takie trudne? O ile nie programujesz lodówką do debuger jest wbudowany w środowisko i jego uruchomienie trwa 2 sekundy. Ja się spodziewam ze jednak błąd masz w kontruktorze Lista, ale to tylko moje wróżenie z kuli.
Żeby dalej zachęcić cię do użycia debugera -> nie ma takiej możliwości żeby był z ciebie chociażby marny programista jeśli nie zaczniesz go używać...

1

Brakuje nawiasu zamykającego:

produkty.push_back(Lista(nazwa,producent,index);

  • błąd przy przepisywaniu?

W funkcji load tworzysz 3 tablice char wczytujesz do nich dane z pliku i wskaźniki do tych tablic przekazujesz do konstruktora klasy Lista. A nie widzę żebyś w obiekcie klasy Lista przechowywał kopie tych tablic. Jeżeli się nie mylę (nie podałeś definicji konstruktora) to masz poważny błąd.
Pętla odczytująca też nie jest poprawna. Ostatni element kontenera z produktami będzie zawierał śmieci! Sprawdzaj poprawność odczytu przed utworzenie obiektu Lista.

0

@Shalom dzięki za propozycje debuggera, dopiero się uczę, a nie których rzeczy nie mówią na studiach.
@Rekman Ten nawias to po prostu błąd przy przepisywaniu na post, tak to by mi się nie kompilowało, ale dzięki za naprowadzenie z tymi wskaźnikami. Faktycznie trzeba było zastosować char* nazwa = new char[50]; i tak dalej. Przeszło i teraz działam dalej.

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