Probleme mit Arrays...



  • Hallo, ich hab vor ein paar Wochen angefangen mit C-Programmieren und jetzt bin ich ein bisschen am rumprobieren. Nun hab ich folgendes Problem:

    in der main Funktion hab ich ein Array, einfach deklariert durch:

    int *array
    

    Nun möchte ich den Speicherplatz für das Array in einer anderen Funktion erst allokieren, z. B. so:

    void funktion(int *array)
    array=malloc(...);
    array[0]=...
    array[1]=...
    

    und dann die einzelnen Arrayelemente wie oben beschreiben. Nun ist es aber so, wenn ich dann nach dem Funktionsaufruf wieder in der main-Funktion auf die array-Elemente zugreifen möchte:

    printf("%d", array[0]);
    

    so werden keine vernünftigen Werte ausgegeben (also nicht die in der funktion zugewiesenen).

    Nun wundert mich das schon ein wenig, da doch Arrays mittels Call-by-reference übergeben werden. Wo liegt denn mein Fehler, und vor allem, wie kann ich es besser machen????

    Danke schonmal für eure Hilfe,
    Grüße, JC



  • Auch der Pointer wird nur call-by-value übergeben. D.h. die Zuweisung erfolgt an die lokale Kopie.

    Lösen könntest du es so:

    void funktion(int** array) {
       *array = (int*)malloc(sizeof(int) * n);
       (*array)[0] = 1;
       (*array)[1] = 2;
       // usw
    }
    
    Aufruf:
    
    int* p;
    funktion(&p);
    


  • Danke schonmal für die schnelle Antwort, und wie deklariere ich das Array in der main-Fkt und übergebe es an die andere Funktion?

    Danke dir,
    JC.



  • Johannis schrieb:

    Danke schonmal für die schnelle Antwort, und wie deklariere ich das Array in der main-Fkt und übergebe es an die andere Funktion?

    Danke dir,
    JC.

    Ein kleines Beispielprogramm:

    #include <stdio.h>
    #include <malloc.h>
    
    void funktion(int** array) {
       *array = (int*)malloc(sizeof(int) * 3);
       (*array)[0]=  11;
       (*array)[1] = 22;
       (*array)[2] = 33;
    }
    
    int main() {
       int i;
       int* p;
       funktion(&p);
       for(i=0; i < 3; i++)
          printf("p[%i]=%i\n", i, p[i]);
       free(p);
    }
    


  • Ok..., hatte den "Aufruf"-Teil in deinem vorigen Post nicht gesehen 😉 . Ist alles klar, danke dir für die Hilfe!

    Grüße,
    JC


Anmelden zum Antworten