speicher freigeben zweidimensionales array



  • nach deiner vorgeschlagenen änderung hat sich aber die fehlermeldung geändert:

    jetzt bekomme ich ein:

    test.exe hat einen Haltepunkt ausgelöst.



  • Die Größenberechnung beim malloc für matrix ist auch falsch.
    Du willst in matrix ja nicht char ablegen sondern char* .



  • matrix = (char**)malloc(sizeof(char)*string_cnt); /* muss sizeof(char*) heißen */
    
        fflush(stdin); /* Anfängerschrott */
    
        for(i;i < string_cnt;i++)
        {
            int x = 0;
            printf("Please input a string %d: ",i);
            matrix[i] = (char*)malloc(sizeof(char)); /* Cast-Schrott */
    
            while((matrix[i][x] = getchar()) != '\n')
            {
                matrix[i] = (char*)realloc(matrix[i],sizeof(char)*(x+2)); /* per se inperformant */
                x++;
            }
        }
    
        for(a=string_cnt; a > 0; a--) /* startet/endet zu früh: for(a=string_cnt-1; a >= 0; a--)*/
    


  • Ach noch was:
    sizeof(char) ist per Default 1. Kannst du also gleich 1 hin schreiben.
    sizeof(char*) ist Systemabhängig.



  • matrix = (char**)malloc(sizeof(char)*string_cnt); /* muss sizeof(char*) heißen */
    

    stimmt und ich such da ewig herum. danke 🙂

    fflush(stdin); /* Anfängerschrott */
    

    ja weiss ich. habs nur halt mit visual studio gemacht zum testen. was mich interessieren würde
    is aber wie man sonst am schnellsten den puffer leer bekommt? gibts da eine andere funktion?

    matrix[i] = (char*)malloc(sizeof(char)); /* Cast-Schrott */
    

    was passt hier genau nicht?

    matrix[i] = (char*)realloc(matrix[i],sizeof(char)*(x+2)); /* per se inperformant */
    

    und hier? irgendwie muss ich die größe ja angeben.



  • du musst hier nichts casten.
    statt

    matrix[i] = (char*)malloc(sizeof(char));
    

    einfach

    matrix[i] = malloc(sizeof(char)); /* ohne (char *) */
    

    das gilt auch für alle anderen mit malloc allokierten speicher. du musst den allokierten speicher -nicht- casten.

    warum willst du den puffer leeren? das brauchst du nicht. eigentlich braucht man dieses unsägliche "fflush" so gut wie nie.



  • du musst hier nichts casten.

    ja schon aber wenn ich nicht caste bekomm ich unter visual studio
    eine error meldung.


  • Mod

    xxmaxx schrieb:

    du musst hier nichts casten.

    ja schon aber wenn ich nicht caste bekomm ich unter visual studio
    eine error meldung.

    Dann benutzt du einen C++-Compiler. Benutze einen C-Compiler für C. Der Standardcompiler vom Visual Studio hat auch einen C(89) Modus.



  • ok alles klar. vielen dank für die hilfe 🙂



  • wenn du nur c programmieren willst, dann kannst du auch einen einfachen c-compiler benutzen.

    ich empfehle den standard-compiler aller linux-systeme: den gcc.

    für windows http://mingw.org/

    man braucht unter windows keinen schei.. von ms.


Anmelden zum Antworten