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

1

20.06.2011, 16:39

Mittels void*-Zeigers und tbMemAlloc() registrierten Speicher füllen

Hi, ich habe mal wieder angefangen das Buch 3D-Spieleprogrammierung zu lesen, weil es mich mal wieder juckte, mein Wissen aufzufrischen :). Jetzt bin ich noch relativ am Anfang über eine Übungsaufgabe(Kapitel 1.4.7) gestolpert, bei der ich mittels tbMemAlloc(...) registrierten Speicher mit Zufallszahlen füllen muss. Alles weiter kein Problem, ich möchte dem Rückgabewert mit der Funktion tbFloatRandom(...) füllen, nur wie stelle ich das an? Ich hab's mal so versucht:

C-/C++-Quelltext

1
2
void* pRandom = tbMemAlloc(sizeof(float));
*pRandom = tbFloatRandom(0.0f, 500.0f);


Scheint aber nicht das Wahre zu sein. Anscheinend kann ich keinen Float-Wert in einen void*-Zeiger schreiben. Würde mir evtl. casten etwas bringen?
Danke schonmal für konstruktive Vorschläge.

Grüße, rabbinator

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

2

20.06.2011, 17:06

Ja, du könntest casten.
Allerdings frage ich mich grade, warum du diese Funktion nutzt und nicht einfach new & delete ( kenne nun leider die TriBase Engine nicht ).

MfG Stazer

3

20.06.2011, 17:35

Hi, danke für die schnelle Antwort. In der TriBase-Engine werden die registrierten Speicherbereiche mit einer Speicherverwaltung gespeichert, deshalb die Funktion tbMemAlloc. Ich muss also per Funktion neuen Speicher registrieren.
Wie sollte ich denn in obigem Beispiel casten? (float*) pRandom = tb... bringt nicht das gewünschte Resultat.

4

20.06.2011, 17:40

ich hab's zum Laufen gebracht. Der Code:

C-/C++-Quelltext

1
float* pRandom = (float*)(tbMemAlloc(sizeof(float)*1000));


hat funktioniert :)

5

21.06.2011, 15:59

/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »E333« (02.09.2021, 04:08)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

6

22.06.2011, 00:17

*Ganz kleinlich motzt* Wie wärs mit C++-Style-Casts? ;)

Hehe, wie wärs mit C++-Style-Speicherverwaltung?^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

7

22.06.2011, 08:41

C-/C++-Quelltext

1
float* pRandom = (float*)(tbMemAlloc(sizeof(float)*1000));

Hm ... funktioniert bestimmt. Aber wofür die 1000? Und wie gesagt ... Funktion-Style-Cast muss nich sein ;)

C-/C++-Quelltext

1
float* random = static_cast<float*>(::tbMemAlloc(sizeof(float)));
sollte die bessere alternative sein ;)
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Darkrel

Treue Seele

Beiträge: 143

Wohnort: Zürich

Beruf: Student ETH Zürich

  • Private Nachricht senden

8

22.06.2011, 10:29

Soll wohl ein Array aus 1000 Floats sein...
:cursing:

Werbeanzeige