debug crash
-
vector schrieb:
wo ist denn der stack?
Das sag ich dir, wenn du mir die erste Frage beantwortest.
vector schrieb:
ich dachte ich arbeite auf dem Arbeitsspeicher.
Ja klar, aber es könnte trotzdem helfen, einen anderen Speicherbereich einzunehmen. Versuch mal so:
char *p = malloc(512000); ... free(p);
-
also, gespeichert hatte ich aus gewohnheit, weil die meisten programme das halt sowieso verlangen, aber ich konnte nicht richtig beenden. hab ich mich richtig klug angestellt, anstatt einfach alles überflüsige weg zu kommentieren.
jetzt wo du das so erwähnst kann ich mich dunkel an diesen Unterschied erinnern, aber wundere mich immer noch was der unterschied zwischen *c und c[] ist. jedenfalls funktioniert deine variante, nur darf ich jetzt alles nochmal schreiben. der stack ist also irgenwo im prozessor, vllt im cache?
wieso free()? der speicher wird beim beenden wieder freigegeben, würde ich mal so sagen.
-
vector schrieb:
wieso free()? der speicher wird beim beenden wieder freigegeben, würde ich mal so sagen.
Grundsätzlich übernimmt das Betriebssystem das, ja. Trotzdem ist das kein guter Stil, da es nur nach Anwendungsende vom OS übernommen werden kann - ziehst du also in einer Schleife Speicher und gibst ihn nicht wieder frei, dann ist irgendwann Schluss. Also zu jedem malloc ein passendes free und alles ist schön.
-
wo ist er nu, der stack
das wars dann heut für mich
danke und gute nacht
-
vector schrieb:
also, gespeichert hatte ich aus gewohnheit, weil die meisten programme das halt sowieso verlangen, aber ich konnte nicht richtig beenden.
Warum postest du dann nicht einfach den Code?
vector schrieb:
der stack ist also irgenwo im prozessor, vllt im cache?
http://en.wikipedia.org/wiki/Stack-based_memory_allocation
vector schrieb:
jetzt wo du das so erwähnst kann ich mich dunkel an diesen Unterschied erinnern, aber wundere mich immer noch was der unterschied zwischen *c und c[] ist.
char *c
ist ein Zeiger auf ein Zeichen.char c[10]
ist ein Array von zehn Zeichen. Wenn ein Ausdruck mit den [] auftaucht, wird er meistens so ausgewertet:c[10] // wird ausgewertet als wäre es *(c + 10)
Das geht deshalb, weil die Elemente eines Arrays im Speicher nacheinander angeordnet werden, und weil man zu einem Zeiger Zahlen addieren darf, um auf das folgende Element des gleichen Typs im Speicher zuzugreifen.
-
mngbd schrieb:
vector schrieb:
also, gespeichert hatte ich aus gewohnheit, weil die meisten programme das halt sowieso verlangen, aber ich konnte nicht richtig beenden.
Warum postest du dann nicht einfach den Code?
weil dann die debug info verloren gewesen wär, ich hätts aber trotzdem machen sollen
-
vector schrieb:
weil dann die debug info verloren gewesen wär, ich hätts aber trotzdem machen sollen
Warum geht dir Information verloren, wenn du sie hierher kopierst?
-
uiouio schrieb:
wieso free()? der speicher wird beim beenden wieder freigegeben, würde ich mal so sagen.
Weil's so im Standard steht. Grundsätzlich übernimmt das Betriebssystem das nicht, obwohl einige das gern tun, weil sie es nicht mögen, wenn ihnen der Speicher ausgeht, nur weil ein Programmierer eine Zeile vergessen hat.
ich schrieb:
nur darf ich jetzt alles nochmal schreiben
Mal ganz im Ernst: alle Compiler, die ich kenne, speichern die Quelldateien sowieso ab, bevor sie mit dem Compilen beginnen, und Compilen vor dem Debuggen sie müssen. Jede Wette, dass der Quelltext noch in dem Dateisystem herumliegt, wenn du ihn nicht selbst gelöscht hast.
-
mngbd schrieb:
Mal ganz im Ernst: alle Compiler, die ich kenne, speichern die Quelldateien sowieso ab, bevor sie mit dem Compilen beginnen
du meinst sicherlich "alle IDEs, die ich kenne, ....", denn Compiler speichern sicherlich nicht den Quellcode.
-
supertux schrieb:
du meinst sicherlich "alle IDEs, die ich kenne, ....", denn Compiler speichern sicherlich nicht den Quellcode.
Ja.