Tachyoon Geschrieben 18. Juni 2001 Geschrieben 18. Juni 2001 Hallo, ich bins schon wieder. Programm wie es ist: #include <stdio.h> #include <iostream.h> #include <stdlib.h> #include <string.h> char *a; char *b; void main(void) { a="text1"; strcpy(b,"text2"); strcat(a, ; } Und folgender Fehler tritt beim Ausführen auf: Die Anweisung in "0x00401121" verweist auf Speicher in "0x00000000". Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden. Klicken sie auf "OK, um die Anwendung... usw.,usw.,usw. Was kann ich denn tun, damit ich die beiden Zeichenketten so aneinanderfügen kann? Ok, jetzt habe ich es korrigiert @Uli Tja, Montagmorgens... Tachyoon [ 18. Juni 2001: Beitrag editiert von: Tachyoon ] [ 18. Juni 2001: Beitrag editiert von: Tachyoon ] Zitieren
gajUli Geschrieben 18. Juni 2001 Geschrieben 18. Juni 2001 Hi, so wie das Programm da steht, kann es gar nicht uebersetzt worden sein, weil tif_bezeichnung und aufruf nicht definiert sind. Ohne komplettes Listing keine Fehlersuche. Ist klar, oder? Uli Zitieren
Gmeiner P Geschrieben 18. Juni 2001 Geschrieben 18. Juni 2001 Hallo, Das ist glasklar das bei deinem Codeteil eine Speicherverletzung auftreten kann. Die Variablen a und b sind hier nur Zeiger auf irgendeinen Speicherbereich(also undefiniert). Du musst daher erst einmal Speicher reservieren auf den die Zeiger a und b jeweils hinzeigen. Ansonsten kann es der Fall sein das versucht vom Betriebssystem reservierten und geschützten Speicherbereich zu schreiben. Wennst du was mit Strings machen willst würde ich mich zuerst einmal intensiv mit Pointern beschäftigen. mfg PGR Zitieren
Gmeiner P Geschrieben 18. Juni 2001 Geschrieben 18. Juni 2001 Hallo, Das ist glasklar das bei deinem Codeteil eine Speicherverletzung auftreten kann. Die Variablen a und b sind hier nur Zeiger auf irgendeinen Speicherbereich(also undefiniert). Du musst daher erst einmal Speicher reservieren auf den die Zeiger a und b jeweils hinzeigen. Ansonsten kann es der Fall sein das versucht vom Betriebssystem reservierten und geschützten Speicherbereich zu schreiben. Wennst du was mit Strings machen willst würde ich mich zuerst einmal intensiv mit Pointern beschäftigen. mfg PGR Zitieren
gajUli Geschrieben 18. Juni 2001 Geschrieben 18. Juni 2001 Da hat der GP wohl recht. Am einfachsten kannst Du das Problem umgehen, indem Du statt char* a, char* b Arrays definierst: char a[100]; char b[100]; (vorausgesetzt, die Zeichenketten werden nicht zu gross). Den Rest kannst Du dann so lassen, wie er ist. Uli Zitieren
Tachyoon Geschrieben 19. Juni 2001 Autor Geschrieben 19. Juni 2001 Jo, das klappt jetzt soweit. Danke an euch beide! Ich habe jetzt erstmal EisenUlis Lösung verwendet, da ich an der "Anzahl an Fehlermeldungen pro Zeile Code" erkennen mußte, daß ich mich mit Pointern noch einige Zeit lang werde beschäftigen müssen bis es für mich Sinn macht, sie einzubauen. Inzwischen habe ich zwar schon wieder ein neues Problem ( bin ich nicht gut? ) aber ich werde mal probieren, ob ichs auch alleine schaffe. Tachyoon Zitieren
Crush Geschrieben 20. Juni 2001 Geschrieben 20. Juni 2001 Arrays sind immer Gefährlich - vor allem wenn Pointer auch noch drauf zeigen. Ich denke es ist sicherer sich eine eigene Array-Klasse zu schreiben bei der Bereichsüberschreitungen gecheckt werden wenn man solche Fehler vermeiden möchte. Die Reaktion des Computers darauf können ziemlich unvorhersehbar sein - und entsprechend schwer die Fehlersuche bei Programmen mit mehreren 1000 Zeilen Code aufwärts. Zitieren
Poldi Geschrieben 20. Juni 2001 Geschrieben 20. Juni 2001 Überlies das von Crush mal gekonnt. Als Anfänger muß man ja auch erst mal anfangen und das nicht unbedingt mit so was. :eek: Für den Anfang reicht das vollkommen aus, wenn du mit Arrays arbeitest. Sollten deine Programme irgendwann mal größer als 3000 Zeilen oder so werden oder wirklich extrem speicherintensiv sein, kannst du dir immer noch ne Klasse schreiben. Aber für den Anfang lern erst mal, was Pointer sind und verkettete Listen... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.