C++ beállító függvény memóriakezelési probléma

C++ beállító függvény memóriakezelési probléma
2021-03-13T14:32:13+01:00
2021-03-13T16:28:54+01:00
2022-10-15T21:26:04+02:00
Tomkaa
Üdv. Lenne egy C++-os feladatom (prog-1.jpg), ahol egy meghatározott kimenetet (kód után) kellene produkálnom. A programkód nagy része előre meg van írva és fix, nekem csak pár függvényt kell kifejtenem. A probléma, hogy nem fut le teljesen memóriakezelési hiba (segmentation fault - core dumped) miatt. Egy debugger a beallit függvényt jelölte meg, szóval szerintem azzal lesz a bibi. Próbáltam többféleképpen is, de mindig kiad vagy memóriakezelési (nem minden compiler jelzi), vagy valamilyen más hibát. Tudnátok ebben segíteni?

Íme a kód (remélem, normálisan tördeli):

Nem tördelte valami jól és kettészedte, úgyhogy felraktam a cpp fájlt ide.

#include <iostream> using namespace std; class Szemelyauto { int loero; string szin; int vetelar; public: Szemelyauto(int _loero, const string & _szin, int _vetelar); ~Szemelyauto(); int getLoero() const; string getSzin() const; int getVetelar() const; }; Szemelyauto::Szemelyauto(int _loero, const string & _szin, int _vetelar): loero(_loero), szin(_szin), vetelar(_vetelar) {} Szemelyauto::~Szemelyauto(){ cout << "Deleted Szemelyauto:" << " " << loero << " " << szin << " " << vetelar << endl; } int Szemelyauto::getLoero() const{ return loero; } string Szemelyauto::getSzin() const{ return szin; } int Szemelyauto::getVetelar() const{ return vetelar; } class Tarolo { Szemelyauto **jarmuvek; unsigned int meret; public: Tarolo(unsigned int _meret); ~Tarolo(); void beallit(Szemelyauto *mutato, unsigned int index); int mennyibenNagyobbALoero(int _loero) const; int mennyiDragabb(int ar) const; }; // FELADATMEGOLDÁS KEZDETE Tarolo::Tarolo(unsigned int _meret): jarmuvek(new Szemelyauto*[_meret]), meret(_meret) { /* így is próbáltam: Szemelyauto** jarmuvek = new Szemelyauto*[_meret]; for (unsigned int i=0; i<meret; i++) { jarmuvek=*new Szemelyauto*[_meret]; }*/ } Tarolo::~Tarolo() { delete[] *jarmuvek; /* Így is próbáltam: for (unsigned int i=0; i<meret; i++) { delete [] jarmuvek; } delete [] jarmuvek;*/ } void Tarolo::beallit(Szemelyauto *mutato, unsigned int index) { if (index) jarmuvek[index]=mutato; /* Próbáltam adattagonként is, de úgy se működik, akkor se, ha publicra állítom a változókat: jarmuvek[index]->loero=mutato->loero; jarmuvek[index]->szin=mutato->szin; jarmuvek[index]->vetelar=mutato->vetelar; Azt is próbáltam, hogy memóriafoglalást rakok ide, de úgy se jó.*/


} int Tarolo::mennyibenNagyobbALoero(int _loero) const { unsigned int szamlal = 0; for (unsigned int i=0; i<meret; i++) { if (jarmuvek ->getLoero()>_loero) { szamlal++; } } return szamlal; } int Tarolo::mennyiDragabb(int ar) const { unsigned int szamlalo = 0; for (unsigned int i=0; i<meret; i++) { if (jarmuvek ->getVetelar()>ar) { szamlalo++; } } return szamlalo; } // FELADATMEGOLDÁS VÉGE int main() { Tarolo autotar(10); autotar.beallit(new Szemelyauto(265, "fekete", 3507098), 0); autotar.beallit(new Szemelyauto(245, "sarga", 9144263), 1); autotar.beallit(new Szemelyauto(160, "kek", 11067466), 2); autotar.beallit(new Szemelyauto(118, "sarga", 2938865), 3); autotar.beallit(new Szemelyauto(198, "fekete", 1060680), 4); autotar.beallit(new Szemelyauto(84, "fekete", 23912277), 5); autotar.beallit(new Szemelyauto(144, "kek", 13242879), 6); autotar.beallit(new Szemelyauto(73, "piros", 25995669), 7); autotar.beallit(new Szemelyauto(157, "kek", 16650549), 8); autotar.beallit(new Szemelyauto(211, "feher", 5096635), 9); cout << "mennyibenNagyobbALoero" << endl; cout << autotar.mennyibenNagyobbALoero(248) << endl; cout << endl; cout << "mennyiDragabb" << endl; cout << autotar.mennyiDragabb(23583984) << endl; cout << endl; cout << "Vege" << endl; return 0; }


A meghatározott kimenet:

mennyibenNagyobbALoero
1

mennyiDragabb
2

Vege
Deleted Szemelyauto: 265 fekete 3507098
Deleted Szemelyauto: 245 sarga 9144263
Deleted Szemelyauto: 160 kek 11067466
Deleted Szemelyauto: 118 sarga 2938865
Deleted Szemelyauto: 198 fekete 1060680
Deleted Szemelyauto: 84 fekete 23912277
Deleted Szemelyauto: 144 kek 13242879
Deleted Szemelyauto: 73 piros 25995669
Deleted Szemelyauto: 157 kek 16650549
Deleted Szemelyauto: 211 feher 5096635






Mutasd a teljes hozzászólást!
Csatolt állomány
Csatolva a javítás, kérlek alaposan tanulmányozd át.
Mutasd a teljes hozzászólást!
Csatolt állomány

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd