[C] Speicherzugriffsfehler bei mehr als 186331 Zeilen

Dieses Thema im Forum "C/C++" wurde erstellt von root1992, 12.09.2006.

  1. #1 root1992, 12.09.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Hallo,

    ich habe mir gestern ein Programm (C) programmiert, dass sollte eine Textdatei einlesen und man kann einen Feldtrenner eingeben, z.B. TAB und die Felderanzahl, die er ausgibt.

    Aus
    Code:
    Feld 1\tFeld 2\tFeld 3\n
    Feld 4\tFeld 5\n
    macht er z.B.
    Code:
    Feld 1\tFeld 2\n
    Feld 4\tFeld 5\n
    Das funktioniert.

    Die Textdatei wird ein einen 2D Array gespeichert. ausgabe[Zeile][Buchstabe]. Die zwei Werte Zeile,Buchstabe werden als Positionsparameter übergeben, sowie der Name der Datei und die Anzahl der Felder und der Trenner.
    Das funktioniert. Ich habe auch ein sh geschrieben, bei dem man nur Name der Datei, Anzahl der Felder und Feldtrenner übergeben muss. Den rest macht eine subshell mit wc -l bzw wc -L.

    Aber ich habe eine Textdatei getestet mit 200.000 Zeilen. Bringt er mir einen Speicherzugriffsfehler. Dann bin ich immer weiter runter gegangen. Mit 186331 Zeilen funktionert es bei mir noch. Ein installscript hänge ich an.

    Meine Frage: Woran könnte es liegen, dass er bei mehr als 186331 Zeilen einen Fehler bringt.

    P.S.: Die Datei ist die INSTALL.sh.txt, das txt sollte entfernt werden, dann ist es ein gewöhnliches sh, dass das C-Programm und das SH erstellt.
     

    Anhänge:

  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 supersucker, 12.09.2006
    supersucker

    supersucker Foren Gott

    Dabei seit:
    21.02.2005
    Beiträge:
    3.873
    Zustimmungen:
    0
    Ja, dein Speicher ist halt alle.

    Entweder du weist mehr Speicher zu oder liest halt nur häppchenweise ein.
     
  4. #3 root1992, 12.09.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Wie kann ich denn dem Programm mehr Speicher zuweisen? (Benutze Debian Sarge). Denn die Arraygröße lege ich ja mit Positionsparametern fest. Oder sollte ich es mal mit maloc() (so resaviert man doch Speicher) versuchen, ob das einen Fehler zurück gibt.
     
  5. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Du solltest Speicher fuer Array immer mit malloc() reservieren.
     
  6. hwj

    hwj Doppel-As

    Dabei seit:
    23.06.2006
    Beiträge:
    131
    Zustimmungen:
    0
    Ort:
    Bei Buxtehude
    Da Du eh' mit festen Größen arbeitest, könntest Du Deinen Paramter "ausgabe" ja auch in eine externe Datei auslagern. Auch wenn Du malloc verwendest, wird die nächste Datei mit 300.000 Zeilen evtl. auch wieder an die Grenzen stossen - oder auf einem anderen Rechner vorher schon aufgeben ...

    Schreib eine Funktion write_ausgabe() und eine read_ausgabe(), per fseek kannst Du dort auch prima auf bestimmte Elemente zugreifgen.

    Hier FreeBSD gibt es auch 'limit', mit dem Prozesse "beschnitten" werden:
    Gibt es das unter linux auch ?

    Heiko
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Das gibt's auch unter Linux in aehnlicher Form ueber die limits.conf.
     
  9. #7 root1992, 12.09.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Ich habe es gelöst. Danke für euere Vorschläge. Aber ich habe es so gelöst, dass ich ein Zeichen einlese und es gar nicht in einem andrem Array zwischenspeichere. So abe ich einen 1D-Array. Ich hänge das INSTALL-skript ran, wens interessiert. Ich habe eine Testdatei mit 1.000.000 Zeilen getestet, funktioniert.

    Und ich brauche für das C-Programm nur noch 30 Zeilen.
     

    Anhänge:

Thema:

[C] Speicherzugriffsfehler bei mehr als 186331 Zeilen

Die Seite wird geladen...

[C] Speicherzugriffsfehler bei mehr als 186331 Zeilen - Ähnliche Themen

  1. [C] Speicherzugriffsfehler mit malloc

    [C] Speicherzugriffsfehler mit malloc: [Erledigt] [C] Speicherzugriffsfehler mit malloc Bei dem folgendem Script, bekomme ich immer bei der Zahl "33789" einen Speicherzugriffsfehler....
  2. ClamAV meldet Speicherzugriffsfehler

    ClamAV meldet Speicherzugriffsfehler: Hi, mein ClamAV will nicht starten: # /etc/init.d/dansguardian start Starting DansGuardian: dansguardianLibClamAV Warning:...
  3. Dansguardian bringt Speicherzugriffsfehler

    Dansguardian bringt Speicherzugriffsfehler: Wenn ich Dansguardian starten will, mekkert er: Starting DansGuardian: dansguardianLibClamAV Warning:...
  4. Speicherzugriffsfehler

    Speicherzugriffsfehler: beim Aufruf von sprintf(name,"Alex");bekomme ich einen Speicherzugriffsfehler. name wurde initialisiert am anfang der funktion mittels char...
  5. apt-get Speicherzugriffsfehler

    apt-get Speicherzugriffsfehler: Hallo, habe ein Debian System neu augesetzt und habe anschließend mit apt-get install ssh den SSH-Server installiert. Nun wollte ich weitere...