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

lionking

Frischling

  • »lionking« ist der Autor dieses Themas

Beiträge: 10

Wohnort: herrnburg

  • Private Nachricht senden

1

14.03.2005, 15:16

Problem in meinem Programm

so ich hab ein problem:
ich hab angefangen ein programm zu schreiben, das heisst ich hab aus dem beispielprogramm "Das erste Dreieck" versucht was zu basteln, das programm soll Quader anzeigen von denen jeweils eine Ecke im ursprung (0,0,0)ist und die gegenüberliegende ecke soll in einem Punkt sein, der aus einer Datei geladen wird...
doch das programm startet, mit allem drum und dran, doch wenn dann eigentlich die würfel angezeigt werden sollten geht es wieder zu windows zurück...
als fehler sagt er:

Zitat

Nicht abgefangene Ausnahme in Dreieck.exe: 0xC0000005: Access Violation.
Nicht abgefangene Ausnahme in Dreieck.exe: 0xC0000005: Access Violation.

Ich hab keine Ahnung woran das liegt, ich hoffe ihr könnt mir helfen!

und noch der quelltext: http://home.arcor.de/lionking16/03%20-%20Das%20erste%20Dreieck.rar

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

2

14.03.2005, 19:53

tippe mal auf ein Zeigerfehler....

3

14.03.2005, 21:38

hatte grad mal keine lust mich durch einen code zu lesen
kannst de mal die von dir geänderten stellen bzw. den teil
wo du die datei einliest posten?

was mir aber aufgefallen ist:

C-/C++-Quelltext

1
2
3
4
5
Dreieck.cpp : 79: // Nun die Dreiecke zeichnen

        if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,  // Dreiecksliste

                                                          6,                    // 16 Dreiecke

                                                          g_aBoxVertexa[ii],    // Vertexdaten

                                                          sizeof(SVertex))))    // Vertexgröße


wieso renderst du 16 dreiecke für einen quader?
sollten nur 12 sein:
2 à Seite, 6 seiten = 12 dreiecke
mal abgesehen davon, das du nur 6 dreiecke renderst......

lionking

Frischling

  • »lionking« ist der Autor dieses Themas

Beiträge: 10

Wohnort: herrnburg

  • Private Nachricht senden

4

14.03.2005, 22:25

jap der kommentar passt nicht...
da hab ich den quader in zwei trianglestrips aufgeteilt, wusste nich wie ichs einfacher machen kann, ausser mit trianglelist...

ok hier mal der veränderte code im einzelnen:
ein paar variablen:

C-/C++-Quelltext

1
2
3
4
SVertex             g_aBoxVertexa[10][8];   // Die acht Vertizes der maximal 10 Quader

SVertex             g_aBoxVertexb[10][8];
SVertex             g_aPunkte[10];          // Die maximal 10 Punkte mit ihren jeweils 3 koordinaten

int                 iZeile = 0;

Zeile 77 und folgende:

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
for(int ii = 0; ii <= iZeile; ii++)
    {
        // Nun die Dreiecke zeichnen

        if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,  // Dreiecksliste

                                                          6,                    // 6 Dreiecke

                                                          g_aBoxVertexa[ii],        // Vertexdaten

                                                          sizeof(SVertex))))    // Vertexgröße

        {
            // Fehler beim Zeichnen!

            MessageBox(g_hWindow, "Fehler beim Zeichnen des Dreiecks!",
                       "Fehler", MB_OK | MB_ICONEXCLAMATION);
            TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
        }

        // Nun die Dreiecke zeichnen

        if(FAILED(hResult = g_pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,  // Dreiecksliste

                                                          6,                    // 6 Dreiecke

                                                          g_aBoxVertexb[ii],        // Vertexdaten

                                                          sizeof(SVertex))))    // Vertexgröße

        {

            // Fehler beim Zeichnen!

            MessageBox(g_hWindow, "Fehler beim Zeichnen des Dreiecks!",
                       "Fehler", MB_OK | MB_ICONEXCLAMATION);
            TB_ERROR_DIRECTX("g_pD3DDevice->DrawPrimitiveUP", hResult, TB_STOP);
        }
    }

Zeile 183 und folgende:

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
// Initialisieren der Quader

    for(int i = 0; i <= iZeile; i++)
    {
        g_aBoxVertexa[i][0].vPosition   = tbVector3( 0.0f,                      0.0f,                       0.0f                    );
        g_aBoxVertexa[i][1].vPosition   = tbVector3( g_aPunkte[i].vPosition.x,  0.0f,                       0.0f                    );
        g_aBoxVertexa[i][2].vPosition   = tbVector3( 0.0f,                      g_aPunkte[i].vPosition.y,   0.0f                    );
        g_aBoxVertexa[i][3].vPosition   = tbVector3( g_aPunkte[i].vPosition.x,  g_aPunkte[i].vPosition.y,   0.0f                    );
        g_aBoxVertexa[i][4].vPosition   = tbVector3( 0.0f,                      g_aPunkte[i].vPosition.y,   g_aPunkte[i].vPosition.z);
        g_aBoxVertexa[i][5].vPosition   = tbVector3( g_aPunkte[i].vPosition.x,  g_aPunkte[i].vPosition.y,   g_aPunkte[i].vPosition.z);
        g_aBoxVertexa[i][6].vPosition   = tbVector3( 0.0f,                      0.0f,                       g_aPunkte[i].vPosition.z);
        g_aBoxVertexa[i][7].vPosition   = tbVector3( g_aPunkte[i].vPosition.x,  0.0f,                       g_aPunkte[i].vPosition.z);

        g_aBoxVertexb[i][0].vPosition   = g_aBoxVertexa[i][2].vPosition;
        g_aBoxVertexb[i][1].vPosition   = g_aBoxVertexa[i][4].vPosition;
        g_aBoxVertexb[i][2].vPosition   = g_aBoxVertexa[i][0].vPosition;
        g_aBoxVertexb[i][3].vPosition   = g_aBoxVertexa[i][6].vPosition;
        g_aBoxVertexb[i][4].vPosition   = g_aBoxVertexa[i][1].vPosition;
        g_aBoxVertexb[i][5].vPosition   = g_aBoxVertexa[i][7].vPosition;
        g_aBoxVertexb[i][6].vPosition   = g_aBoxVertexa[i][3].vPosition;
        g_aBoxVertexb[i][7].vPosition   = g_aBoxVertexa[i][5].vPosition;

        for(int j = 0; j < 8; j++)
        {
            g_aBoxVertexa[i][j].dwColor = tbColor( 1.0f, 1.0f, 1.0f); 
            g_aBoxVertexb[i][j].dwColor = tbColor( 1.0f, 1.0f, 1.0f);
        }
    }

Datei laden 220 und folgende:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Punkte aus Datei holen

    ifstream Input;
    Input.open("punkte.txt", ios::in | ios::binary);        //Datei zum lesen öffnen

    
    char k[100];

    while(!Input.eof())
    {
        Input.getline(k, 100);                  //Datei zeilenweise lesen und im Zeilenpuffer speichern

        if(k[0] == ' ') break;
        
        g_aPunkte[iZeile].vPosition = tbVector3( k[0], k[1], k[2]);             

        for(int l = 0; l < sizeof(k); l++)
            k[l] = ' ';                         // Den Zeilenpuffer (k) annullieren


        iZeile++;
    }

ich hoffe das hilft erstmal

edit:
hmm, irgendwie hat sich der fehler in luft aufgelöst, trotzdem danke für eure Hilfe!

lionking

Frischling

  • »lionking« ist der Autor dieses Themas

Beiträge: 10

Wohnort: herrnburg

  • Private Nachricht senden

5

18.03.2005, 10:38

so jetzt hab ich ein ganz anderes Problem...

ich hab das programm mehr oder weniger fertig und wollte es meinem Freund
zeigen...
ich hab ihm das programm geschickt: http://home.arcor.de/lionking16/3DQuader.exe
und die Tribase.dll

aber es kommt ein fehler:

(Link)


woran liegt das?

mfg stefan

6

18.03.2005, 11:45

1. in deiner url fehlt ein l vor "ionking16"
2. das bild sagt mal gar nix aus. der fehler könnte überall liegen
3. du hast oben geschrieben das der ursprüngliche fehler
von allein verschwunden ist?
ich wüde wetten, dass er immernoch da ist.

bau doch ein log in dein programm ein damit du siehst wo genau er
abbricht.

lionking

Frischling

  • »lionking« ist der Autor dieses Themas

Beiträge: 10

Wohnort: herrnburg

  • Private Nachricht senden

7

18.03.2005, 13:26

hm.. der alte fehler ist meiner Meinung nach weg, da es bei mir einwandfrei funktioniert...
nur halt bei meinem Freund nicht, kann das sein dass es daran ligt, dass er kein directx sdk hat oder so? wohl eher nich oder?
das programm funzt auch nich bei ihm: http://home.arcor.de/lionking16/Dreieck.exe (auch von mir editiert)
aber die anderen beispielprogramme funzen...

weigo

Treue Seele

Beiträge: 234

Wohnort: Deutschland

  • Private Nachricht senden

8

18.03.2005, 13:32

Hast du das Programm auch mit der Konfiguration Release kompiliert oder mit der Konfiguration Debug? Debug wird bei deinem Freund nicht gehen. Wenn du deine Programme weitergeben willst, dann solltest du immer Release einstellen.

9

18.03.2005, 13:33

kann ich alle nicht testen weil meine tribase.dll zu alt ist oder
eine funktion jedenfalls nicht kennt.

egal. wenn alles was du editiert hast bei ihm nicht läuft, alles
andere aber schon sollte dir das zu denken geben.
liegts eventuell an der hardware????
kann auch sein dass es bei dir trotz dem fehler geht bei aber nicht.
das kenn ich von mir: aufm desktop liefs aufm notebook
is mein programm damals immer abgekackt.
bis ich gemerkt hab das mehr als ein speicherfehler & pointerfehler
drinne war der aufm desktop seltsamer weise nicht weiter aufgefallen ist....
also schau halt nochmal ob der alte fehler wirklich behoben ist.
bzw. kömmentier alle änderungnen von dir aus
und kompilier dann sollte es bei ihm ja wohl laufen wenn die
anderen proggis bei ihm auch gehn......

lionking

Frischling

  • »lionking« ist der Autor dieses Themas

Beiträge: 10

Wohnort: herrnburg

  • Private Nachricht senden

10

18.03.2005, 14:16

ich hab immer das release genommen...

ich finds nur komisch das alle programme die ich gemacht hab bei mir gehen und bei ihm nich, is dann überall ein fehler drinn?!

ich werds nochmal genau durchgehen und das testen was du mir vorgeschlagen hast...

hier noch die tribase.dll für dich zum testen ;) http://home.arcor.de/lionking16/TriBase.exe

Werbeanzeige