dynamischer Speicher



  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    
    int main()
    {
        FILE *fp;
        int i = 0;
        char buffer[500] = {0};
        char **text;
    
        if((fp = fopen("Text.txt", "rw")) == NULL)
        {
            printf("Fehler: Datei konnte nicht ge\224ffnet werden!\n\n");
            return EXIT_FAILURE;
        }
    
        text = malloc(sizeof(char));
        if(!text)
        {
            printf("Fehler: kein Speicher f\201r Stringtabelle vorhanden!\n\n");
            return EXIT_FAILURE;
        }
    
        fgets(buffer,500,fp);
        buffer[strlen(buffer)-1] = '\0';
        text[0] = malloc((strlen(buffer)+1)*sizeof(char));
        if(!text[0])
        {
            printf("Fehler: kein Speicher f\201r String vorhanden!\n\n");
            return EXIT_FAILURE;
        }
        strcpy(text[0], buffer);
    
        while(fgets(buffer,500,fp))
        {
            i++;
            if(buffer[strlen(buffer)-1] == '\n')
                buffer[strlen(buffer)-1] = '\0';
            text = realloc(text, i*sizeof(char));
            if(!text) printf("FEHLER");
            text[i] = malloc((strlen(buffer)+1)*sizeof(char));
            if(!text[i]) printf("FEHLER");
            strcpy(text[i], buffer);
        }
    
        for(i=i; i<=0; i--)
            free(text[i]);
    
        free(text);
    
        fclose(fp);
    
        return 0;
    }
    

    Irgendetwas mache ich beim dynamischen Speicher noch falsch...

    Aufgabe:
    Arraytabelle erstellen -> sprich **text zeigt auf Zeile und *text enthält Zeileninhalt.
    Speicher soll dynamisch sein.

    text[i] = malloc((strlen(buffer)+1)*sizeof(char));
    

    Bei dieser Zeile bekomme ich beim Debuggen eine Fehlermeldung -> Program received signal SIGSEGV, Segmentation fault.

    aber was mache ich falsch?
    In dieser Schleife wo der Fehler auftritt mache ich zuerst ein realloc damit ich den Speicher für eine weitere Zeile bekomme. Danach reserviere ich mit malloc den Speicher in der Zeile.
    so zumindest mein Gedanke.



  • Was möchtest du mit Zeile 19

    text = malloc(sizeof(char));
    

    erreichen?

    Tipp: sizeof(char) ist laut Standard immer 1. Es ist die kleinste adressierbare Einheit. Egal wieviel Bit die hat.



  • An einem Array ist nichts dynamisch.
    **text ist kein Array
    *text ist kein Array

    Dein realloc-Gebrauch ist demzufolge Nonsens, weil du nicht verstanden hast, was **text bedeutet.


Anmelden zum Antworten