3 Stimmen

Fehler: Die variable Arraygröße darf nicht initialisiert werden

Ich habe ständig diese Fehler mit meinem Array. Wie soll ich ein 2D-Array unbekannter Größe zurückgeben? Ich versuche ein pbm-Bild zu manipulieren, indem ich es in ein Array umwandle und dann Array-Manipulationen durchführe. Hier ist mein Code

typedef struct
{
     unsigned char blackWhite;
} PBMPixel;

typedef struct
{
     int x, y;
     PBMPixel *data;
} PBMImage;

Dies ist in meiner Header-Datei definiert, die mir keine Probleme bereitet hat. Später habe ich das:

char * ArrayCreate(PBMImage *img, int x, int y)
{
    char ManipArray[x][y];
    int i = 0;
    int j= 0;
    for( i=0; i < x; i++)
    {
        for ( j=0; j < y; j++)
        {
            char ManipArray[i][j] = img->data[(i*(j+1)+j)].blackWhite;
            j++;
        }
        i++;
    }
    return ManipArray;
}

Dies sind die Fehlermeldungen, die ich immer zurück bekomme:

P-MFunctionHolder.c: In function 'ArrayCreate':
P-MFunctionHolder.c:171:4: error: variable-sized object may not be initialized
P-MFunctionHolder.c:176:2: warning: return from incompatible pointer type [enabled by default]
P-MFunctionHolder.c:176:2: warning: function returns address of local variable [enabled by default]

Ich verwende MinGW und Windows 8, falls das hilft, aber ich bezweifle, dass das das Problem ist. Ich habe auch nicht den gesamten Code gepostet, weil das etwa 260 Zeilen lang ist und viele genau die gleichen Fehlermeldungen gibt.

2voto

Brian Cain Punkte 13956

Wie soll ich einen 2D-Array unbekannter Größe zurückgeben?

Typische Lösung für dieses Problem besteht darin, Speicher auf dem Heap für einen Zeiger zuzuweisen und implizit die Verantwortung für die Deallokation an den Aufrufer zu übergeben.

Zum Beispiel:

char * ArrayCreate(PBMImage *img, int x, int y)
{
    char *ManipArray = malloc(x * y * sizeof(char));
    int i = 0;
    int j = 0;
    for( i = 0; i < x; i++)
    {
        for ( j = 0; j < y; j++)
        {
            ManipArray[i * y + j] = img->data[(i*(j+1)+j)].blackWhite;
            j++;
        }
        i++;
    }
    return ManipArray;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X