Zum Inhalt springen

Speicherfehler bei Stringverarbeitung in C++


Empfohlene Beiträge

Geschrieben

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, B);

}

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 ]

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben

Ü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... ;)

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...