Moin zusammen
Ich wollte mir für die Übung im Buch (2.2.8.2) eine Funktion schreiben, welche ein paar Zufallsvekoren in eine Datei schreibt. Dabei habe ich versucht nur die TriBase-Funktionen zu verwenden.
Mal abgesehen davon, dass die folgende Funktion sicherlich hätte eleganter gelöst werden können, kommt dazu, dass sie leider abschmiert
|
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
|
void writeNRandVecs2File()
{
//int lineSize = sizeof(float)*3 + 3;
void *pMemFile = NULL;//tbMemAlloc(lineSize * VECTORCOUNT);
//char *file;
//tbMe
for(int i=0;i<VECTORCOUNT;i++)
{
//((tbVector3*)pMem)[i]=tbVector3(tbFloatRandom(-10.0,10.0),tbFloatRandom(-10.0,10.0),tbFloatRandom(-10.0,10.0));
char line[100];
//void *pMemLine = tbMemAlloc(lineSize);
int charNum = sprintf(line,"%f %f %f\n",tbFloatRandom(-10.0,10.0),tbFloatRandom(-10.0,10.0),tbFloatRandom(-10.0,10.0));
if(pMemFile)
{
int oldSize = tbMemGetSize(pMemFile);
void *memTmp = tbMemAlloc(oldSize);//tbMemAlloc(oldSize);
memcpy(memTmp,pMemFile,oldSize);
tbMemReAlloc(pMemFile, -(charNum));
//tbMemReAlloc(pMemFile, oldSize + charNum);
//realloc(pMemFile, -charNum);
//memset(pMemFile,'0',(int)_msize(pMemFile));
memcpy(pMemFile,memTmp,oldSize);
memcpy((char*)(pMemFile)+(oldSize-1),line,charNum+1);
//BOOL isOk = tbMemIsValid(pMemFile);
//TB_SAFE_MEMFREE(memTmp);
}
else
{
pMemFile = tbMemAlloc(charNum+1);
//memset(pMemFile,'0',(int)_msize(pMemFile));
memcpy(pMemFile,line,charNum+1);
}
}
tbWriteFile("E:\\Vectors.txt",pMemFile,tbMemGetSize(pMemFile));
}
|
Das ganze passiert wenn das 2. Mal in die if-Bedingung gesprungen wird (i==2).
Durch die GetSize-Funktion wird ja indirekt tbMemIsValid aufgerufen, wo auch der Abturz passiert: pEntry==0xfeeefeee.
Bin für jeden Hinweis dankbar
Ach ja: Hab hier das Forum durchsucht aber nichts gefunden, was konkret auf meinen Fall zutrifft. Falls dieses Problem doch schon besprochen wurde, langt auch link - bitte nich schimpfen *g*