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