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

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

06.07.2006, 16:31

Run-Time Check Failure #3 - The variable 's_rc' is being use

Hi,

ich lasse ein Quadrat in einem Fenster zeichnen. Nun frage ich in der Nachrichtenschleife ab, ob die LinkeMausTaste gedrückt wurde.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    case WM_LBUTTONDOWN:
            {
                smallrect s_rc;

                RECT rc;

                GetClientRect(hWnd,&rc);

                HDC hDC = GetDC(hWnd);

                POINTS  points = MAKEPOINTS(lParam);

                if(points.x > s_rc.s_rc_to_draw.left && points.x < s_rc.s_rc_to_draw.right && points.y > s_rc.s_rc_to_draw.bottom && points.y > s_rc.s_rc_to_draw.top)
                {   
                    FillRect(hDC,&rc,CreateSolidBrush(RGB(0,0,0)));
                }
                ReleaseDC(hWnd,hDC);
        }break;


Die Koordinaten des Cursors werden mittels dem Makro MAKEPOINTS umgewandelt und mit den Angaben des Dreiecks (ist in einer Klasse, die ich in einer anderen Datei habe) verglichen.

Lasse ich das nun im Debug-Modus laufen und klicke irgendwo hin, kommt ein Fehler:

[list]Run-Time Check Failure #3 - The variable 's_rc' is being used without being defined.[/list] Er springt außerdem zu der if-Anweisung. Im Release-Modus passiert gar nichts!

Wo liegt meinh Fehler? Die Klasse stimmt eingentlich (glaub ich) und somit müsste s_rc ja definiert sein.

Hoffe auf Hinweise.

mfg spacegaier

Anonymous

unregistriert

2

06.07.2006, 16:36

C-/C++-Quelltext

1
smallrecht s_rc = NULL;


Damit müsste es gehen...

Anonymous

unregistriert

3

06.07.2006, 16:37

1. Fehlerüberprüfungen sind keine Vorhanden. Hättest Du diese drin könnte man den Fehler noch genauer finden.
2. s_rc ist für mich nicht initialisiert, wie kannst du also damit arbeiten?
3. Setz vor smallrect einen Breakpoint und navigiere Dich zum Fehler. Der Debugger wird Dir dann genau sagen wo Fehler liegen.

DarkRaider
Ist s_rc ein Pointer :shock:

Anonymous

unregistriert

4

06.07.2006, 16:39

Ja ähm... Auf jeden Fall sollte sie bei der Definition oder gleich danach
irgendwie initialisiert werden ;) Wusste jetzt nicht wie er die initialisieren kann
hätte ich besser beschreiben sollen sry :)

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

5

06.07.2006, 16:43

1. Okay die fehlen
2. Warum nicht initialisiert? Ich erstelle doch ganz normal ein Objekt, oder?
3. Der Fehler leigt in der if-Aweisung

Anonymous

unregistriert

6

06.07.2006, 16:46

1. Gut einbauen
2.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
struct test
{
    unsigned long x;
    unsigned long y;
};

void foobar (void)
{
    test my_test; // Na welche Werte haben bei der Instanzierung x und y?

}
3. u see: debugger rockt.

Anonymous

unregistriert

7

06.07.2006, 16:47

Du musst s_rc mit irgendwas initialisieren, damit du es verwenden kannst.
Jetzt ist mein Beispiel doch ganz gut:

C-/C++-Quelltext

1
smallrect s_rc = NULL;


Das Ding ist nur, dass s_rc kein Pointer ist, wie nix da schon gesagt hat.
Ich weiß jetzt aber auch nicht, was s_rc für ein Objekt ist und wie man
das initialisieren kann. Vielleicht ja so:

C-/C++-Quelltext

1
2
3
4
s_rc.s_rc_to_draw.left   = 0;
s_rc.s_rc_to_draw.right  = 0;
s_rc.s_rc_to_draw.bottom = 0;
s_rc.s_rc_to_draw.top    = 0;

Anonymous

unregistriert

8

06.07.2006, 16:49

DarkRaider
Ähm, ich glaube Du wirfst da etwas durcheinander: Wenn es ein Pointer ist und Du diesem NULL gibst, ist er noch immer nicht "initialisiert" ;) Er zeigt genau wie zuvor auf kein Objekt mit Dateninhalten. ;)

Du initialisierst nur einen Zeiger, aber nicht mit einer Adresse auf ein "echtes Objekt" ;) Den Zeiger dürfte er mit NULL ebenfalls nicht benutzen, da würde es knallen.

Anonymous

unregistriert

9

06.07.2006, 16:50

Ich bin jetzt ein wenig verwirrt ;) Aber ich werds mir merken :D

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

10

06.07.2006, 17:07

Habs gelöst: Die Variabeln wurden nicht richtig initialisiert -> nix da hat wie (fast) immer recht.

Doch kann mir noch jemand erklären, warum der Fehler vom Anfang nur im Debug-Modus kam. Ich glaube der ist etwas pingeliger, aber was macht der genau anders als der Release-Modus?

mfg spacegaier

Werbeanzeige