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

09.10.2006, 22:17

Absturz beim Verwenden von tbMem*-Funktionen

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*

2

16.10.2006, 13:18

Schade dass keiner antwortet.
Die Funktion an sich, is ja nich sonderlich schwierig aufgebaut. Und das ganze bei sich irgendwo reinzukopieren und debuggen is auch nich so wahnsinnig aufwendig.

Das Problem is nicht, dass ich nicht wüsste wie ich die Vektoren in die Datei schreib. Wollte halt spaßeshalber das ganze auf die TriBase-Funktionen beschränken. Und da scheint's (vermutlich) bei der tbMemReAlloc Probleme zu geben...

Naja, falls doch noch einer was weiß, wär ich dankbar
;)

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

3

16.10.2006, 14:42

kannst ja mal David ne PM schreiben... is immerhin seine Engine

Werbeanzeige