Arrays dynamisch in Subroutinen alloziieren



  • Hallo,

    Ich möchte gerne in einer Subroutine Speicher dynamisch erzeugen, dann den Pointer zurückgeben und auf die Elemente des Arrays zugreifen können.

    Hier der Code, den ich probiert habe:

    #include "stdafx.h"
    #include <stdlib.h>
    #include <malloc.h>
    #include <string.h>
    
    int DirCurrentPath(int** pi)
    {
    	if ( (*pi = (int*) malloc( :p sizeof(int))) == NULL)
    		return -1;
    	*pi[0] = 10;
    	*pi = (int*) realloc(*pi, 2 * sizeof(int));
    	*pi[1] = 20;
    	return 0;
    }
    
    int main(int argc, char* argv[])
    {
    
    	int* ptest;
    
    	ptest = NULL;
    	DirCurrentPath(&ptest);
    	printf("first integer: %d\n", ptest[0]);
    	printf("second integer: %d\n", ptest[1]);
    	free(ptest);
    	return 0;
    }
    

    Wenn ich das Programm laufen lasse, bekomme ich folgende Ausgabe:

    first intager: 10
    second integer: -8421504541

    Meines erachtens sollte der 2. intager aber 20 sein. Wie krige ich das hin?

    Danke für eure Hilfe. :p 🙄



  • [] geht vor *. Das ist aber nicht, was du willst, daher musst du Klammern setzen.



  • Danke für den Hinweis, geht aber trotzdem nicht! 😕

    Ich denke ich habe dich richtig verstanden:

    [] geht vor *. Das ist aber nicht, was du willst, daher musst du Klammern setzen.

    int DirCurrentPath(int** pi)
    {
        if ( (*pi = (int*) malloc( sizeof(int))) == NULL)
            return -1;
        *(pi[0]) = 10;  //Hier Klammern gesetzt    
        *pi = (int*) realloc(*pi, 2 * sizeof(int));
        *(pi[1]) = 20;  //Hier Klammern gesetzt    
        return 0;
    }
    


  • Hey vielen Dank,

    Blödsinn, hab die Klammern falsch gesetzt
    sorry 🙄
    jetzt geht es!!!! 😋

    int DirCurrentPath(int** pi)
    {
        if ( (*pi = (int*) malloc( sizeof(int))) == NULL)
            return -1;
        (*pi)[0] = 10;  //Hier Klammern gesetzt    
        *pi = (int*) realloc(*pi, 2 * sizeof(int));
        (*pi)[1] = 20;  //Hier Klammern gesetzt    
        return 0;
    }
    

Anmelden zum Antworten