ZFX
ZFX Neu
Home
Community
Neueste Posts
Chat
FAQ
IOTW
Tutorials
Bücher
zfxCON
ZFXCE
Mathlib
ASSIMP
NES
Wir über uns
Impressum
Regeln
Suchen
Mitgliederliste
Membername:
Passwort:
Besucher:
4419845
Jetzt (Chat):
17 (0)
Mitglieder:
5239
Themen:
24223
Nachrichten:
234554
Neuestes Mitglied:
-insane-

ZFX
Coding-Foren
Sourcecode-Probleme
mein programm stürzt ab
Normal
AutorThema
Psycho Offline
ZFX'ler


Registriert seit:
16.09.2002

Hamburg
mein programm stürzt abNach oben.
hallo. mein programm stürzt mit c0000005 ab. warum?

starte ich es über visual studio 08 mit "start debugging" stürzt das visual studio ab.

ich weiß, dass sich der heap fragmentieren kann bei vielen new's und delete's. ich mache viele new's und delete's, mehrere millionen auf jeden fall. mögliche ursache?

der absturz tritt nicht exakt, aber immer nach einer ähnlichen laufzeit auf.
der absturzort im code ist im gleichen scope, jedoch nicht immer in der gleichen zeile.
in diesen zeilen wird kein new/delete aufgerufen.

bevor das programm abstürzt, stimmen bereits einige berechnungen vorher nicht.

die symptome sind genauso, als wenn ich irgendwo speicher überschreiben würde, wo ich es nicht sollte.
ich werd jetzt nochmal sorgfältig darauf prüfen, hab das jetzt aber schon ne weile gemacht...konnte nix finden.

edit: ahja jetzt schon das zweite mal passiert: meine usb-maus am notebook geht nach der aktion nicht mehr, nur noch das touchpad...(vista32)

der rechner wird auch sehr langsam die letzten 5-10 sekunden bevor es zum absturz kommt, hohe festplattenaktivität.

1 Mal gendert, zuletzt am 28.12.2008, 23:02:27 Uhr von Psycho.
28.12.2008, 22:50:30 Uhr
Helmut Offline
ZFX'ler


Registriert seit:
11.07.2002

Deutschland
280083044 helmut4242
Re: mein programm stürzt abNach oben.
Hi,
ich weiß zwar auch nicht, was das eigentliche Problem ist, aber du könntest es vielleicht umgehen, wenn du einen eigenen kleinen Memorymanager schreibst. Mit operator new sollte das ganz leicht gehen. (ich würd sonst zwar davon abraten, aber hier ists wohl was anderes)

Ansonsten kannst du den Fehler vielleicht mit Minidumps ausfindig machen. Falls VS mit dem Minidump auch abstürzt kannst du die auch mit Kommandozeilentools auslesen (Debuggingtools for Windows)

Ciao
29.12.2008, 11:21:50 Uhr
Bomber-Revolution
unique75 Offline
ZFX'ler


Registriert seit:
24.07.2004

Baden-Württemberg
Re: mein programm stürzt abNach oben.
Ein paar mehr Infos wären hilfreich. Machst du new/delete für Klassenobjekte oder einfach nur sinnlos Bytespeicher allokieren Im ersteren Fall dürfte ja kaum etwas passieren, da man immer korrekt auf die Member schreibt. Im letzteren Fall kann es natürlich sein, dass du irgendwann doch mal zuviel auf den Speicher schreibst. Vielleicht würde da eine Art Memory-Klasse helfen, wo du dir mal die Grösse+Pointer zusammen merken kannst. Dann könntest du im Fehlerfall evt. was sehen.
Oder vielleicht führst du das new/delete in endlos langen rekursiven Funktionen aus. Dann läuft evt. dein Stack über.
Sind alles nur Vermutungen, aber vielleicht hats ja geholfen
29.12.2008, 12:04:52 Uhr
Psycho Offline
ZFX'ler


Registriert seit:
16.09.2002

Hamburg
Re: mein programm stürzt abNach oben.
ahh man...die fehler sind immer soo offensichtlich...hab ein CloseHandle(thread) vergessen und eben auch ein paar mio davon erzeugt.

der taskmgr hat komischerweise nur 8 laufende threads angezeigt..also die threads waren beendet aber noch nicht freigegeben.

dachte ich hätte schon so ne wrapper-klasse gemacht

Code:
class WindowsThread
{
  private:
    HANDLE m_handle;

  public:
    WindowsThread(...bla...)
    { m_handle = CreateThread(...bla...); }
    ~WindowsThread()
    { CloseHandle(m_handle); }
}


war aber wohl doch noch nicht geschehen...naja...fehler gefunden, jetzt bin ich erstmal zufrieden.
nächstes mal sind die fehler hoffentlich wieder da, wo ich sie vermute.

danke trotzdem für eure tipps.
29.12.2008, 13:26:45 Uhr
dLoB Offline
ZFX'ler


Registriert seit:
27.06.2005

Nordrhein-Westfalen
Re: mein programm stürzt abNach oben.
Für sowas hab ich immer
Code:
#include 

boost::shared_ptr<void> handle(CreateThread(/* blubb */), CloseHandle);
genommen. RAII wird leider von viel zu wenig Leuten auch beachtet :/

1 Mal gendert, zuletzt am 29.12.2008, 17:28:35 Uhr von dLoB.
29.12.2008, 17:28:11 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: mein programm stürzt abNach oben.
Nicht direkt problembezogen, aber wenn du so viele Threads mit CreateThread() erzeugst kann das hier vielleicht von Bedeutung sein. Falls du die CRT nutzt ist ein paar Millionen mal 70 bis 80 Bytes auch schon eine ganze Menge verschwendeter Speicher.

Gruß, Ky

2 Mal gendert, zuletzt am 29.12.2008, 17:48:51 Uhr von Krishty.
29.12.2008, 17:47:22 Uhr
dLoB Offline
ZFX'ler


Registriert seit:
27.06.2005

Nordrhein-Westfalen
Re: mein programm stürzt abNach oben.
Es lebe die WinAPI \o/
Wie dumm ist denn sowas? o.O
29.12.2008, 17:54:48 Uhr
Psycho Offline
ZFX'ler


Registriert seit:
16.09.2002

Hamburg
Re: mein programm stürzt abNach oben.
danke dlob, das ist echt ne gute variante wenn man keine extra klasse erstellen möchte.

dir auch danke krishty, wusste ich noch nicht.
29.12.2008, 18:36:21 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: mein programm stürzt abNach oben.
Zitat von dLoB:
Es lebe die WinAPI \o/
Wie dumm ist denn sowas? o.O
Die Win-API stellt ja auch für die CRT-Funktionen, die Speicherlecks verursachen, eigene Alternativen zur Verfügung. Als Programmierer müsste man außerdem wissen, dass man APIs nicht wahllos mixen sollte. In diesem Fall funkt aber die Selbstverständlichkeit, mit der man die CRT nutzt, dazwischen.

1 Mal gendert, zuletzt am 29.12.2008, 19:24:01 Uhr von Krishty.
29.12.2008, 19:23:06 Uhr
dLoB Offline
ZFX'ler


Registriert seit:
27.06.2005

Nordrhein-Westfalen
Re: mein programm stürzt abNach oben.
Die CRT gehört jawohl definitiv zur Sprache C dazu, wie die Standardbibliothek zu C++ gehört. Wenn Microsoft schon die Windows API in C (oder das was angeblich C sein soll) verfasst, dann sollte man auch die ganze Sprache nutzen können... Wenn ich ein C++ Programm schreibe, dann möchte ich auch gerne die Standardbibliothek benutzen, denn sonst programmiere ich doch kein C++. Ist schon übel, dass andere Betriebsysteme sowas hinbekommen, aber Microsoft nicht.

Wenn man also diese Alternativen nutzen soll, wozu gibts dann noch die CRT? Zur Kompatibilität mit anderen APIs? Das wäre eine miese Kompatibilität, wenn sie Speicherlecks zur Folge hat. Anscheinend muss man damit aber leben oder man macht sich doppelt so viel Mühe und extra für Windows andere Funktionen verwenden, als in den Standards vorgesehen sind.
29.12.2008, 20:48:21 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: mein programm stürzt abNach oben.
Zitat von dLoB:
Die CRT gehört jawohl definitiv zur Sprache C dazu, wie die Standardbibliothek zu C++ gehört. Wenn Microsoft schon die Windows API in C (oder das was angeblich C sein soll) verfasst, dann sollte man auch die ganze Sprache nutzen können...
Das stimmt so nicht:
Zitat:
Though often confused with the C Standard Library because of this packaging, the C Runtime Library is not a standardized part of the language and is vendor-specific.

Im übrigen erfüllt(e) die WinAPI einen anderen Zweck als die C-Runtime. Für „normale“ Anwendungen sollte man mit ersterer kaum in Kontakt kommen, es waren nur in den letzten 15 Jahren viele Leute der Meinung, je näher sie am Betriebssystem programmierten, desto besser.

1 Mal gendert, zuletzt am 29.12.2008, 21:53:12 Uhr von Krishty.
29.12.2008, 21:53:00 Uhr
dLoB Offline
ZFX'ler


Registriert seit:
27.06.2005

Nordrhein-Westfalen
Re: mein programm stürzt abNach oben.
Achso, da haben wir wohl aneinander vorbei geredet. Ich meinte, dass die Funktionen in den C Headern zur Sprache gehören und nicht die Implementation dieser Runtime. Da das eine mit dem anderen wohl offensichtlich zusammenhängt, läuft es doch darauf hin, dass die WinAPI das verwenden der C Funktionen erschwert. Oder sehe ich hier was falsch?
30.12.2008, 03:46:26 Uhr
Krishty Offline
ZFX'ler


Registriert seit:
01.02.2004

Nordrhein-Westfalen
342173470
Re: mein programm stürzt abNach oben.
Soweit ich das einschätzen kann, soll man mit den Threading-Funktionen der WinAPI garnichts zu tun haben. Die werden angeboten, damit Programme und Dienste, denen keine C-Runtime zur Verfügung steht (Systemkomponenten) und nicht zuletzt auch die C-Runtime selbst (die ja von Threading über Dateien bis zu Exceptions fast alles, was die WinAPI anbietet, kapselt) Zugriff auf Threading-Funktionalität des Betriebssystems erhalten, nicht damit sie Otto Normal-Programmierer für seine Anwendungen nutzt. Die WinAPI direkt zu nutzen, obwohl die C-Runtime zur Verfügung steht, ist nur eine zur Normalität gewordene Unsitte, weil viele meinen so noch Performance raushauen zu können.

Ich sehe das etwa so, wie Grafikhardware direkt über den Treiber anzusprechen und gleichzeitig dazu DirectX einzusetzen… man benutzt zwei Schnittstellen die eigentlich übereinander liegen, nebeneinander, und meckert noch, dass es nicht rund läuft. (Würde auch niemand eine Datei gleichzeitig per fwrite() und WriteFile() schreiben… dass ein Thread, den man mit CreateThread() erzeugt hat, auch Eigentum einzig und allein von der WinAPI und nicht von der CRT ist, übersieht man nur schnell, weil man nichts anderes macht als eine normale Funktion zu schreiben und ausführen zu lassen.)

3 Mal gendert, zuletzt am 30.12.2008, 04:12:49 Uhr von Krishty.
30.12.2008, 04:08:05 Uhr
dLoB Offline
ZFX'ler


Registriert seit:
27.06.2005

Nordrhein-Westfalen
Re: mein programm stürzt abNach oben.
Hui, fixe Antwort

Nun erst hab ich die Idee dahinter verstanden... Das Problem liegt einfach darin, dass halt zu wenig der WinAPI in höheren Schichten gekapselt wird. So bin ich bisher der Meinung gewesen, dass alle Funktionen in dieser widerlichen CreateThread/WriteFile/WhatEver Notation, also die eigentlichen API Funktionen das Mittel der Wahl sind. So hab ich bisher dieses _beginthread Dingens auch als sowas komisches wie strncpy_s o.Ä. aufgefasst, quasi irgend eine Verwurschtelung des bisherigen Standards, obwohl es auf den ersten Blick keinen Vorteil bringt.
Es gibt halt viel zu viele Funktionen, die genau das selbe machen :/
30.12.2008, 04:48:31 Uhr
Lord Delvin Offline
ZFX'ler


Registriert seit:
05.07.2003

Baden-Württemberg
166781460
Re: mein programm stürzt abNach oben.
[OT]
(Ich möchte eigentlich keine Kommentare zu meinem lesen, weil ich befürchte, es artet in Geflame aus; es ist auch nicht böse gemeint und soll nicht provozieren, es ist mir nur wichtig es zu erwähnen)

Mich entsetzt irgendwie, dass hier alle meinen es wäre sinnvoll Win-only funktionen zu verwenden...mal von DirectX abgesehen sehe ich echt nicht wozu das gut sein soll, weil die meisten platform unabhängigen libs wie z.b. boost von DEUTLICH besserer qualität sind als die windows äquivalente, was nicht wirklich verwundert, da Microsoft eigentlich nicht in der Lage ist irgendwelche Designfehler zu reparieren.

Außerdem würde euch bei platform-independant halt valgrind weiterhelfen, wenn euch mal der Speicher in die quere kommt so wie hier.
Ich weis ja nicht, aber ich finde das tool rechtfertigt es alle windows only libs rauszuwerfen, weil man halt wirklich code produzieret, der alle Speicherverwendung fehlerfrei macht und das führt letztlich dazu, dass euer code in den allermeisten Fällen genau das macht, was ihr erwartet.
[/OT]
Wie gesagt, falls jemand wirklich antworten will, dann bitte in nem neuen thread, ich werds vermutlich nicht kommentieren.
Gruß
LordD

1 Mal gendert, zuletzt am 30.12.2008, 11:14:36 Uhr von Lord Delvin.
30.12.2008, 11:13:33 Uhr
Normal


ZFX Community Software, Version 0.9.1
Copyright 2002-2003 by Steffen Engel