Hallo ich lerne gerade auf eine Klausur und versuche einen Code zu verstehen jedoch sehe ich in dem Code kein Problem, da die Ausgabe funktioniert?

Aufgabenstellung - (programmieren, Cplusplus)

2 Antworten

Das Programm an sich funktioniert, aber C und c++ benutzen Pointer für Speicherbereiche.

Da wird zB ein Objekt erstellt und mit einem Zeiger auf den Speicherbereich gezeigt. Wenn jetzt mehrere Pointer zum selben Objekt erstellt werden, sind das nicht verschiedene Objekte mit jeweils eigenem Speicherbereich, sondern quasi immer der selbe Speicherbereich. (Hoffe, das war jetzt verständlich formuliert :D)

Dann hast du also zB 3 Pointer, mit denen du im Programm arbeitest, die aber alle das selbe Objekt manipulieren.

Außerdem kann man in C/++ den Pointer löschen, ohne den Speicherbereich freizugeben. Das kann dazu führen, dass ein programmen unmengen an Speicher frisst und es zu vom BS gestoppt wird

Danke ich glaub ich habe es verstanden werde es jetzt nochmal durch gehen.

1
@Nirvana93

btw, ich hab mir dein Programm nicht angesehen, weiß also nicht, ob das hier auch das Problem ist. Hab nur gesehen, dass da einige Pointer erstellt worden sind (Das mit dem Stern)

0
@Nirvana93

da ich grade totale langeweile habe, hab ich mir das Programm mal angesehen.

Also pointer werden hier benutzt, weil diese nur auf speicherbereiche zeigen, unabhängig davon was sich dort befindet.

Dadurch kannst du einen einzigen vector benutzen, der wiederrum Pointer enthält, welche wiederrum auf verschiedene Strukturen zeigen (Car und Cycle). Die jeweiligen Objekte zu dem Pointer werden im Zeiger selbst erstellt, je nachdem ob "makevehicle" mit "car" oder "Cycle" aufgerufen wird (Das mit pushback). Schau im In ternet am besten einmal nach vector nach.

Ein Problem, dass sich daraus ergibt (neben denen die ich schon nannte) ist nun auch, dass der Pointer für 2 verschiedenen Strukturen gleich heißt. Um das problem zu lösen sollte man innerhalb der Struktur eine Möglichkeit der Abfrage einbauen, anhand man die jeweilige Struktur identifizieren kann. Am besten eine feste Variable. Sowas wie "int me = 1" für cycle

in der Forschleife wird dann lediglich der vector einmal komplett durchgegangen und die drivemethode abgerufen

0

Das Problem liegt darin, dass zwei Objekte per "new" erzeugt werden, die aber nicht wieder freigegeben werden.