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

06.07.2008, 09:06

pointer in verbindung mit TriBase Mem Fubnktionen

Hi,

Erstmal, wenn das eher in das Forum über das Buch 3D Spieleprogrammierung gehört tut mir das leid. Aber ich bin mir nicht sicher und denke es gehört eher hier hin.

Also mein problem: mir scheint in meinem wissen über c++ gibt es eine Lücke: Pointer und Heap speicher.

Was ich weiß: Ich weiß, dass es einen unterschied zwischen Stack und Heap gibt und in etwa auch was der unterschied ist. Ich weiß auch wie man speicher im heap (mit hilfe von Pointern) reserviert und wieder freigibt (new bzw. delete).

Was ich nicht weiß/verstehe: Diese ganzen mem funktionen von C++ kenne ich nicht. Dadurch herscht bei mir verwirrung. Im oben genannten Buch bin ich gerade im ersten Kapitel bei der 2. Aufgabe. Aber ich verstehe nicht ganz wie ich in einem void pointer ein oder sogar einen ganzen Array von Integern speichern soll...

Ich hab die aufgabe teils gelöst ich glaube aber, dass es nicht richtig ist.
Mein Lösungsansaz:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <TriBase.h>

int main()
{
    tbInit();

    void* pData = tbMemAlloc(1000 * sizeof(int));
    void* pData2 = tbMemAlloc(1000 * sizeof(int));

    int a[1000];
    int b[1000];

    for(int i = 0; i < 1000; i++)
    {
        a[i] = tbIntRandom(0, 1000);
        b[i] = tbIntRandom(0, 1000);
    }

    pData = a;
    pData2 = b;

    tbWriteToLog("pData = %i\n", pData);          // Hier kommt immer das

    tbWriteToLog("pData2 = %i\n", pData2);       // gleiche raus...


    void* pDataTemp = tbMemAlloc(1000 * sizeof(int));

    tbWriteToLog("Vertauschung...\n");
    //memcpy(pDataTemp, pData, tbMemGetSize(pData));          // memcpy war im Buch vorgeschlagen allerdings hat es

    //memcpy(pData, pData2, tbMemGetSize(pData2));            // das Prog immer zum absturtz gebracht...

    //memcpy(pData2, pDataTemp, tbMemGetSize(pDataTemp));

    pDataTemp = pData;
    pData = pData2;
    pData2 = pDataTemp;
    //TB_SAVE_MEMFREE(pDataTemp);               // auch TB_SAVE_MEMFREE hat IMMER einen absturtz veruhrsacht...

    tbWriteToLog("Vertauschung fertig\n");

    tbWriteToLog("pData = %i\n", pData);         // Hier kommt immer das

    tbWriteToLog("pData2 = %i\n", pData2);      // gleiche raus...


    tbExit();

    return 0;
}



Bei meinen bissherigen Programmen (Anwendungen, keine Spiele) war es bissher nie nötig den Heap zu verwenden, deshalb habe ich mich nie damit auseinandergesetzt. Nun befürchte ich eine große Lücke zu haben oder denke ich nur falsch???

Bitte helft mir! Im falle einer Lücke wäre ein tut zu Heap verwendung oder so sehr nett.


Mfg Yazoo

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

06.07.2008, 10:28

Jo, da hast du ein paar Fehler drin:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const int size = 1000 * sizeof( int );
int* pData = ( int* )malloc( size ); // statt tbMemAlloc

int* pData2 = ( int* )malloc( size ); // statt tbMemAlloc


for ( int i = 0; i < 1000; ++i )
{
    pData[ i ] = i; // statt tbIntRandom

    pData2[ i ] = i*100; // statt tbIntRandom

}

int* tmp = pData;
pData = pData2;
pData2 = tmp;

free( pData2 );
free( pData );
@D13_Dreinig

3

07.07.2008, 08:31

Ja so funktioniert das aber nun kommtr der teil weswegen es vielleicht doch eher in das buchforum müsste: Im Buch steht man soll die funktionen der TriBase Engine benutzten und die können halt nur einen void pointer zurückgeben...

ich würde mich da sehr gerne dran halten.

4

07.07.2008, 08:35

ok hab das prob selbst gelößt:

C-/C++-Quelltext

1
int* pData = (int*) tbMemAlloc(1000 * sizeof(int));


funktioniert.

trotzdem danke!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

07.07.2008, 08:41

Jo, so stand das ja auch in meinem Code nicht? Man beachte das malloc genauso nur einen void Pointer zurück gibt.
@D13_Dreinig

6

07.07.2008, 08:43

ja nur das wusste ich nicht und dachte malloc wäre überladen bis mir das ( int* ) vor der funktion aufgefallen ist und dann hab ich es einfach mal ausprobiert.

thx

Werbeanzeige