Dynamisches Array mit Pointer auf Array



  • Hi, hab das Problem, dass ich die Fehlermeldung
    assignment from incompatible pointer type bekomme, wenn ich *zahlen mit float initialisiere. Bin mir auch sonst nicht wirklich sicher, ob das Programm auch genau das macht, was es soll, zB beim Speicherort.

    [cpp]
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>

    int feldini(int anzahl, int *ptr);

    int main(int argc, char *argv[])
    {

    int i, anzahl;

    float *zahlen;
    printf("Geben Sie die gewuenschte Groesse des Feldes ein: ");
    scanf("%d", & anzahl);
    int *ptr;
    int pos;

    feldini(anzahl, ptr);

    pos= *ptr;

    for (i=0; i<anzahl; i++) {
    printf("Geben Sie die %d. Zahl ein: ", i+1);
    scanf("%f", &(zahlen[i])); }

    printf("zahl 3 = %f\n", zahlen[2]);
    printf("Speicherort= %d\n", pos);

    free(zahlen);

    getchar();
    getchar();

    return 0;

    }

    int feldini (int anzahl, int *ptr) {
    float *zahlen;

    zahlen = malloc(anzahl * sizeof(int));

    ptr= zahlen;

    printf("vor memset: %d\n", zahlen[2]);
    memset(zahlen, 0, 1000);
    printf("nach memset= %d\n", zahlen[2]);

    return *ptr;
    }
    [code]

    Außerdem habe ich keine Möglichkeit gefunden memset mit der unbestimmten Arraygröße zu benutzen, darum steht da im Moment nur 1000.

    Wär echt nett wenn mir jemand helfen könnte 😃



  • Hallo,
    du mußt deiner Variable zahlen eine Adresse übergeben, bevor du Zahlen da reinschreibst. Deine Funktion feldini könnte dann so aussehen:

    float* feldini(unsigned anzahl)
    {
        float* ptr = malloc(anzahl*sizeof(float)); // oder besser: malloc(anzahl*sizeof(*ptr));
        if ( ptr != NULL )
            memset(ptr,0, anzahl*sizeof(*ptr));
        return ptr;
    } 
    
    int main()
    {
        float *zahlen; unsigned anzahl = 3;
         zahlen = feldini(anzahl);
    if ( zahlen != NULL )
    //... 
    
    }
    

    Statt malloc und memset kannst du für die Speicherreservierung calloc benutzen.



  • Dankeschön 👍 Das hat mir den Abend gerettet!
    scheint einwandfrei zu laufen...


Anmelden zum Antworten