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

Lerikson

Alter Hase

  • »Lerikson« ist der Autor dieses Themas

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

1

17.03.2009, 09:58

Merkwürdiges Compiler Problem

Hi,
Ich habe folgendes Problem :
In letzter Zeit stürzen alle meine Programme beim Debuggen ab(der Bildschrim wird schwarz und die Anwendung lässt sich nicht beenden)
hier ein mal der Code meines jetzigen Versuchs:

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <allegro.h>

BITMAP *foo = NULL;
BITMAP *doublebuffer = NULL;

int set_graphic_mode() 
{
    set_color_depth(16);
    if (set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0) >= 0)
    {
        return 1;
    }
    set_color_depth(15);
    if (set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0) >= 0) 
    {
        return 1;
    }
    set_color_depth(16);
    if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0) >= 0) 
    {
        return 1;
    }
    return 0;
}

int main(int argc, char **argv)
{
    allegro_init();
    install_keyboard();
    
    if (!set_graphic_mode()) {
        allegro_message("Unable to set graphic mode!");
        exit(0);
    }
    
    doublebuffer = create_bitmap(SCREEN_W, SCREEN_H); 
    foo = load_bitmap("newfoo.bmp", NULL);
    
    int x = 0;
    int y = 0;
    int dx = 1;
    int dy = 1;
    while (!key[KEY_ESC]) {

        if (key[KEY_UP]){
            y-=dy;
        } else if (key[KEY_DOWN]){
            y+=dy;
        } else if (key[KEY_RIGHT]){
            x+=dx;
        } else if (key[KEY_LEFT]){
            x-=dx;
        }
        // Linker und rechter Rand

        if (x + dx < 0) {
            dx *= -1;
        } else if (x + foo->w >= SCREEN_W) {
            dx *= -1;
        }
        // Oberer und unterer Rand

        if (y + dy < 0) {
            dy *= -1;
        } else if (y + foo->h >= SCREEN_H) {
            dy *= -1;
        }
        
        acquire_bitmap(doublebuffer);
        clear(doublebuffer);
        blit( foo, doublebuffer, 0, 0, x, y, foo->w, foo->h);
        release_bitmap(doublebuffer);
        
        blit(doublebuffer, screen, 0, 0, 0, 0, doublebuffer->w, doublebuffer->h);
    }
    
    
} END_OF_MAIN();


Fehlermeldung:

Zitat

Unbehandelte Ausnahme bei 0x00e61782 in Allegro_Bewegung.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0x00000000.


Ich habe Fehlermeldung schon oft gegoogelt habe auch schon alle möglich überpüft (müsste am Code liegen)
aber das sonderbare ist:
Wenn ich in den Debug Ordner gehe und dort die .exe anklicke läuft diese einwandfrei!
Errare est humanum. -Windows ist menschlich ;-)

Anonymous

unregistriert

2

17.03.2009, 10:11

C-/C++-Quelltext

1
2
    doublebuffer = create_bitmap(SCREEN_W, SCREEN_H);
    foo = load_bitmap("newfoo.bmp", NULL); 

Du prüfst nicht auf NULL und benutzt Zeiger, die laut der Fehlermeldung da unten NULL sind.

3

17.03.2009, 10:13

Ich kenn Allegro nicht aber ich würd mal sagen, dass eine der Lade-Funktionen fehl schlägt.

C-/C++-Quelltext

1
2
    doublebuffer = create_bitmap(SCREEN_W, SCREEN_H);
    foo = load_bitmap("newfoo.bmp", NULL); 

Des weiterem schätze ich, dass er "newfoo.bmp" nicht findet, außer du startest direkt die ".exe". Kopier die newfoo.bmp mal ins Projektverzeichnis.

Ich würde dir empfehlen zu debuggen, dann findest den Fehler sofort.
Ausßerdem solltest du beim laden immer prüfen, ob er was geladen hat.

C-/C++-Quelltext

1
2
if (!foo)
  // Fehlerausgabe


Gruß
Markus

EDIT:
Verdammt ulong war schneller :)

Lerikson

Alter Hase

  • »Lerikson« ist der Autor dieses Themas

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

4

17.03.2009, 10:47

ich habs so gemacht wie ihr gesagr habt und folgende Änderung eingefügt:

C-/C++-Quelltext

1
2
3
4
5
6
doublebuffer = create_bitmap(SCREEN_W, SCREEN_H); 
    foo = load_bitmap("newfoo.bmp", NULL);

    if(!foo){
        allegro_message("Foo konnte nicht geladen werden!");
    }

Und tatsächlich kann er nicht geladen werden obwohl er im gleichen Verzeichnis wie die .exe ist !?
Warum ist jetzt noch die Frage...
Errare est humanum. -Windows ist menschlich ;-)

Anonymous

unregistriert

5

17.03.2009, 10:53

Lerikson
Wenn du es aus der IDE startest, muss es im Projektverzeichnis liegen.

Lerikson

Alter Hase

  • »Lerikson« ist der Autor dieses Themas

Beiträge: 412

Wohnort: nördlich von Hamburg

Beruf: Schüler

  • Private Nachricht senden

6

17.03.2009, 11:26

ok danke,
ich hab jetzt das Bild in jeden Ordner des Projekts geschmissen und jetzt geht´s

vielen Dank für die Hilfe!
Errare est humanum. -Windows ist menschlich ;-)

Werbeanzeige