Stack around the variable XY was corrupted



  • Hallo.
    Ich habe mein Zeichenprogramm aufwerten wollen, so dass man RGB-Werte manuell eingeben kann. Hier einmal der Code:

    case WM_COMMAND:
        switch(LOWORD(wParam)) //Welcher Button wurde gedrückt
        {
        case 0:
            char red, blue, green;
            GetWindowText(txt_Red, &red, 3);
            GetWindowText(txt_Blue, &blue, 3);
            GetWindowText(txt_Green, &green, 3);
            PaintPen = CreatePen(PS_SOLID, 5, RGB(red, blue, green));
            break;
        }
        //Diverese andere Buttons, nicht wichtig
    

    So, ich habe im Degbugmodus die Schritte überprüft, nach den 3 GetWindowText Zeilen haben die Characterarrays seltsame Werte wie 50 '2' wenn ich für Rot 255 eingebe.Und wenn dann alle Befehle abgearbeitet werden bekomme ich den Fehler
    Stack around the variable XY was corrupted.
    Hat das was miteinander zu tun? Habe schon versucht in der MSDN fündig zu werden und habe gegoogelt ... manche haben auch den Fehler aber die Antworten halfen mir nichts 😞

    Grüße. Steve 🤡



  • Leg mal lieber ein Array an für den Text anstatt nur einzelne Buchstaben.



  • Dann bekomme ich folgende Fehlermeldung:

    error C2664: 'GetWindowTextA': cannot convert parameter 2 from 'char(*__w64)[3]'to'LPSTR'

    😞



  • & wegnehmen.



  • hehe, dann bekomme ich wieder den Stack Fehler 😃



  • ok...versuch erstmal c zu lernen, dann klappts auch mit winapi 😉



  • Mit einzelnen chars wirst du hier wohl nicht weiterkommen, denn bei GetWindowText steht zu nMaxCount folgendes:

    Specifies the maximum number of characters to copy to the buffer, including the NULL character. If the text exceeds this limit, it is truncated.

    Da dein Buffer aber nur ein Byte groß ist passt nur das NULL-Zeichen hinein - wenn du was größeres angibst wirst du über kurz oder lang einen Speicherzugriffsfehler bekommen.

    Ich denke dein Problem ist, dass du 3 Ziffern eingibst (0 bis 255), und diese direkt in einen char einlesen willst - GetWindowText arbeitet aber auf Zeichenbasis ('2','5','5'). Ich denke GetDlgItemInt könnte was für dich sein 🙂



  • flenderst schrieb:

    Ich denke GetDlgItemInt könnte was für dich sein

    Danke, der Tipp war es.

    Grüße, Steve! 🤡


Anmelden zum Antworten