Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst stack around the variable paintstruct ps was corrupted

Mitglied: BernddasBrot2

BernddasBrot2 (Level 1) - Jetzt verbinden

08.05.2009, aktualisiert 18.10.2012, 5869 Aufrufe, 7 Kommentare

Hi,
ich probier grad mit der Win32-API bisschen rum, und bekomm während das Programm läuft ständig diese bescheuerte Fehlermeldung vom Vista:
Stack around the variable 'ps' was corrupted.
ps ist bei mir ein Paintstruct. Normalerweise versteh ich den Fehler so, dass das Programm mehr speicher benötigt, als in der Variable reserviert wurde,
nur versteh ich nicht ganz, wie das bei einem Paintstruct passieren kann.

Ich poste euch mal den Quelltext:

#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT("Win32");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName;


if(!RegisterClass(&wndclass))
{
MessageBox(NULL, TEXT("Programm arbeitet mit Unicode und setzt Windows NT voraus!"), szAppName, MB_ICONERROR);
return 0;
}

hwnd = CreateWindow(szAppName, TEXT(szAppName), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd,iCmdShow);
UpdateWindow(hwnd);

while(GetMessage(&msg, hwnd, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxChar, cyChar, cxCaps;
HDC hdc;
PAINTSTRUCT ps;
TCHAR szBuffer[10];
TEXTMETRIC tm;
char buf[256];
int i = 0;
int line = 0;
FILE *file;

switch(message)
{
case WM_CREATE:
hdc = GetDC(hwnd);

GetTextMetrics(hdc, &tm);
cxChar = tm.tmAveCharWidth;
cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
cyChar = tm.tmHeight + tm.tmExternalLeading;

ReleaseDC(hwnd, hdc);
return 0;

case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);

file = fopen("dat.dat", "r");
if(file == NULL)
{
MessageBox(hwnd, "Konnte Datei nicht öffnen!", "Error", MB_ICONERROR);
return 0;
}

while(buf[i] != EOF)
{
do
{
buf[i] = fgetc(file);
i++;
}while(buf[i] != EOF && (strcmp(buf, "x0xX0X") != 0));

if(strcmp(buf, "x0xX0X") != 0)
{
TextOut(hdc, 0, line*cyChar, buf, strlen(buf));
line++;
}
i=0;
}

fclose(file);

EndPaint(hwnd, &ps);
return 0;

case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}


Hoffe, ihr könnt mir helfen.
Danke schon mal
Bernd
Mitglied: mrtux
08.05.2009 um 09:05 Uhr
Hi !

Zitat von BernddasBrot2:

Formatieren mit <"code"> Code </"code"> tut für Programmierer not und ist auch gut für Bernd das Brot

guggst Du:

01.
static int cxChar, cyChar, cxCaps; 
02.
HDC hdc; 
03.
PAINTSTRUCT ps; 
04.
TCHAR szBuffer[10]; 
05.
TEXTMETRIC tm; 
06.
char buf[256]; 
07.
int i = 0; 
08.
int line = 0; 
09.
FILE *file;
mrtux
Bitte warten ..
Mitglied: 76109
08.05.2009 um 12:13 Uhr
Hallo Bernd das Brot (?),

vermutlich reicht das sizeof(struct) nicht für die Datenmenge aus und zerschießt daher den Stack.
Oder die Stackvariable ist wirklich zu klein gesetzt? Wie groß ist die Struct? Wie groß ist der Stack?

Gruß Dieter
Bitte warten ..
Mitglied: BernddasBrot2
08.05.2009 um 14:07 Uhr
Ich weiss nicht, wie groß die ist. Ich denke mal, dass die noch den Standardwert hat. Ich wusste gar nicht, dass man der eine bestimmte Größe zuweisen kann.
Bitte warten ..
Mitglied: 76109
08.05.2009, aktualisiert 18.10.2012
Hallo Bernd das Brot,

ja doch, die Variable ist in einer *.h definiert. Standard ist glaube ich 4096 Byte. Der Grund dafür ist, dass sich der Heap-Speicher (Malloc) direkt am Stackende befindet. Im Near-Modell [Code][Datensegment][Stack][Heap].

Ich habe schon über 15 Jahre nicht mehr mit "C" oder "C++" gearbeitet und kann im Moment keine genaue Angabe machen. Aber ich schau mal auf uralten CD's nach, ob ich noch was finde und gebe Dir dann Bescheid.

Falls die Struct sehr groß ist, dann rate ich die Struct Global zu definieren oder mit einem Struct-Pointer über Malloc Speicher anfordern.

Gruß Dieter

PS Im Zweifel sieh Dir mal diesen Link an: https://www.administrator.de/forum/fread-problem-mit-struct-und-bin%c3%a ...
Beispiel von mir: Global oder Pointer
Bitte warten ..
Mitglied: 76109
08.05.2009 um 15:12 Uhr
Hallo Bernd das Brot,

also, die Stack-Variable ist z.B in "STKLEN.C" definiert.

unsigned _stklen = 0x1000; /* Default stack size in bytes */

0x1000 = 4096 Byte

Gruß Dieter

PS. Diese Variable wird im StartUp-Code verwendet, um Stack-Größe entsprechend festzulegen.
Achtung: Wenn der Wert verändert wird, muss ein neues StartUp.Obj erstellt werden. Also besser Finger weg, wenn Deine Kenntnisse noch nicht so weitreichend sind.
Bitte warten ..
Mitglied: 76109
08.05.2009 um 16:12 Uhr
Hallo nochmal,

ich habe mir grad Deinen Code nochmal angesehen und festgestellt, dass Du alle Variblen auf dem Stack definierst. Dafür ist der Stack nicht gedacht. Zu viel Speicherplatz für den Stack. Der Stack dient hauptsächlich der Übergabe von Argumenten bei Aufrufen von Subroutinen und kleineren Variablendefinitionen jede Menge Structs, buf[256].... alles in allem ist das zuviel des Guten. Du musst auch bedenken das Hintergrundfunktionen z.B IR's etc. den Stack teilweise mit benutzen. Entweder große Variablen Global definieren oder Speicher z.B. mit Malloc auf dem Heap belegen.

Gruß Dieter
Bitte warten ..
Mitglied: BernddasBrot2
08.05.2009 um 16:34 Uhr
Danke, ich hab jetzt den buf auf den Heap gelegt und das Paintstruct global deklariert. Jetzt funktioniert, ausser dass das Programm jetzt ständig ohne Angabe von Fehlern abstürzt.
Trotzdem danke, zu meiner Frage hast du mir ja gut geholfen
Bitte warten ..
Ähnliche Inhalte
Microsoft

PS: Dateien in einem Ordner Umbenennen und nummerieren mit PS

gelöst Frage von PludanMicrosoft5 Kommentare

Hallo Ich möchte in einem Ordner die Fotos mit PowerShell umbenenne. Zum Beispiel in: Test 1.arw . Die Nummerierung ...

DSL, VDSL

Dual Stack Lite Problem

gelöst Frage von NePheusDSL, VDSL3 Kommentare

Hallo zusammen, ich habe auf meinem Synology NAS die FTP Funktion aktiviert, einen neuen Benutzer mit entsprechenden Rechten angelegt ...

Assembler

EBP im Stack speichern- wofür?

gelöst Frage von StefaOnAssembler1 Kommentar

In Anlehnung zum Artikel ( ) stellt sich mir folgende Frage: Wenn ich eine neue Funktion erstelle, macht er ...

Switche und Hubs

HP 2920-48G im Stack

gelöst Frage von AmistarSwitche und Hubs7 Kommentare

Hallo Liebe Community, ich bin zurück in der Welt der Switche und versuche gerade ein paar Sachen zu verstehen ...

Neue Wissensbeiträge
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 8 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 14 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server25 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

Visual Studio
Singletone Objekt in Datei speichern
gelöst Frage von it4baerVisual Studio13 Kommentare

Hallo, ist es möglich ein Singleton-Objekt zu "serialisieren" und dann in eine Datei zu speichern um es später wieder ...