Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

CeDoMain

Alter Hase

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

11

03.04.2016, 21:30

Genau, ich kann in deinem Code keine Zeile entdecken, wo du den Speicher für dein Place-Array reservierst. Füge ganz oben in deiner setPlaceProperties folgende Zeile hinzu:

C-/C++-Quelltext

1
place = new S_place[24]
Damit reservierst du 24 Speicherbereiche mit der Größe von S_place, auf die dann die 24 Pointer in dem Array zeigen.
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

12

03.04.2016, 21:48

Wieso nicht einfach S_place place[24];!?

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

13

03.04.2016, 22:28

Ich habs jetzt so gemacht wie CeDoMain gesagt hat. Allerdings hab ichs ein bisschen abgeändert:

C-/C++-Quelltext

1
2
3
4
for(int i = 0; i < 24; i++)
{ 
   place[i] = new S_Place[24];
}

Ich weiß jetzt aber nicht ob das so stimmt, ich bin mir mit der [24] am ende nicht so ganz sicher...

Naja, auf jeden Fall funktionierts jetzt erst mal!
Ich danke euch ALLEN für Eure Hilfe.

Mfg
Typ

P.S. Darauf wäre ich nie gekommen, obwohls so offensichtlich ist XD Ich denk einfach zu kompliziert :dash:

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Typ« (03.04.2016, 22:49)


CeDoMain

Alter Hase

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

14

03.04.2016, 23:31

Wieso nicht einfach S_place place[24];!?
Habe ich auch erst überlegt! Aber wenn ers anders machen will warum nicht. :) Wo wir grad dabei sind: Andere Möglichkeit:

C-/C++-Quelltext

1
2
3
4
5
// Im Header
S_place* place;

// Beim initialisieren
place = new S_place()[24];

Wobei ich ihm dringend empfehlen würde einen Vector zu benutzen:

C-/C++-Quelltext

1
std::vector<S_place> place;


Ich habs jetzt so gemacht wie CeDoMain gesagt hat. Allerdings hab ichs ein bisschen abgeändert:
Sowas erzeugt ein Speicherleck, denn du reservierst für jeden Einzelfeldzeiger 24 Speicherplätze! Da hast du am Ende 24 x 24 angelegt, von denen du dann nur einen Bruchteil benutzt. Warum hast du meinen Vorschlag abgeändert? Hat der nicht funktioniert? Benutz anstatt new lieber Dots Vorschlag oder direkt einen std::vector!

Ansonsten schreib deinen Code da oben mal so:

C-/C++-Quelltext

1
2
3
4
for(int i = 0; i < 24; i++)
{ 
   place[i] = new S_Place();
}
Und vergiss nicht am Ende allen Speicher mit delete wieder freizugeben!
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

04.04.2016, 00:04

Wieso nicht einfach S_place place[24];!?
Habe ich auch erst überlegt! Aber wenn ers anders machen will warum nicht. :)

Weil dieses "anders" eine unnötig kompliziertere, fehleranfällige und ineffiziente Lösung ist...

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

16

04.04.2016, 14:18

Ich hab im haeder doch S_Place place[24]; stehen?!

@CeDoMain: Deinen ersten Lösungsvorschlag hab ich geändert, weil er anders nicht funktioniert hat, genau wie der hier:

C-/C++-Quelltext

1
2
3
4
5
// Im Header
S_place* place;

// Beim initialisieren
place = new S_place()[24];


Vielleicht mag mich mein Compiler einfach nicht, aber auf jeden Fall wird 'new' unterringelt.

Aber ist ja egal, jetzt geht's! (Ich hab das [24] nach new S_Place jetzt weggemacht :))

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

17

04.04.2016, 14:20

Aber ist ja egal, jetzt geht's! (Ich hab das [24] nach new S_Place jetzt weggemacht :))

Das ist dann aber nicht richtig; wenn du das [24] wegmachst, ist das kein Array mehr. Du müsstest wenn dann die () wegmachen. Dir mangelt es offenbar doch schwer an den Grundlagen, ich kann dir nur empfehlen, dass du ein gutes C++ Einsteigerbuch durcharbeitest...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

18

04.04.2016, 14:21

Das klingt irgendwie nicht so, als ob die aktuelle Lösung jetzt wirklich korrekt ist. Sie sieht jetzt genau wie aus?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

CeDoMain

Alter Hase

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

19

04.04.2016, 18:03

Vielleicht mag mich mein Compiler einfach nicht, aber auf jeden Fall wird 'new' unterringelt.
Mal ehrlich, wenn du dich auf irgendwelche unterkringelten Fehler verlässt, kommst du nicht so weit! Schau dir doch wenigstens die Fehlermeldung an und versuch sie zu verstehen - gerade wenn du eine vom Compiler bekommst, sollte man das nutzen. Falls du alleine nicht weiterkommst, schreibs uns hier rein, wir können dir sicherlich helfen. Wenn du bei jeder Unterkringelung einfach deinen Code abänderst ohne zu wissen warum, dann lernst du nicht viel dabei. Und schließlich bist du der Programmierer - nicht dein Compiler! ;)
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Werbeanzeige