Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Speicherfehler bei Stringverarbeitung in C++

Empfohlene Antworten

Veröffentlicht

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 ]

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

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

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

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

  • Autor

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

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.