簡體   English   中英

如何創建可變大小的數組,將變量2d數組傳遞給函數並返回另一個2d數組?

[英]How to create a variable sized array, pass a variable 2d array to a function and return another 2d array?

如何創建尺寸可變的2d數組,傳遞該變量數組並返回不同尺寸的2d新數組? 我已經為此工作了幾個小時,但找不到解決方案。 我設法為PGM圖像創建了一個像素值數組,但是現在我試圖“旋轉”該數組,但這變得異常復雜,因為我的編譯器不允許我聲明可變大小的對象。謝謝對於那些回答的人來說非常重要。

這是調用該函數的語句。 有人告訴我使用malloc,因為您無法創建大小可變的數組。

char *SpunArray = malloc(image->x * image->y * sizeof(PGMPixel));
SpunArray = Rotate90Array(image->x, image->y, CreatedArray);

這是功能:

//char * Rotate90Array(int x, int y, char *array[x][y] )
char * Rotate90Array(int x, int y, char *array )
{
    printf("\nLine 179");
    // These have to be swapped because the image is being rotated
    char *RotatedArray = malloc(x * y * sizeof(char));
    printf("\nLine 182");
    int u = x - 1;
    int v = y - 1;
    int i = 0;
    int j = 0;
    printf("\nLine 187");
    char *ptr;
    printf("\nLine 189");
    for (i = 0; i < x; i++)
    {
        printf("\nLine 192");
        *ptr = RotatedArray[i];
        printf("\nLine 194");
        for (j = 0; j < y; j++)
        {
            printf("\nLine 197");
//          *ptr = *(array[u-j][i]);
            *(ptr+((j*x)+(u-i))) = *(array+((i*y)+j));
            printf("\nLine 200");
            ptr++;
            printf("\nLine 202");
        }
    }
    printf("\nLine 205");
    return RotatedArray;
}

我正在使用MingGW gcc和Windows 8(如果有幫助)。

您有內存泄漏。 為什么要創建兩個數組而不是一個?

這樣做:

char *SpunArray = malloc(image->x * image->y * sizeof(PGMPixel));
Rotate90Array(image->x, image->y, CreatedArray, SpunArray);

void Rotate90Array(int width, int height, char *array, char *RotatedArray)
{
    int i = 0;
    int j = 0;
    for (i = 0; i < width; i++)
    {
        for (j = 0; j < height; j++)
        {
            // check this line on correct
            RotatedArray[i * height + j] = array[j * width + width - i - 1];
        }
    }
}

我認為這段代碼可以按預期工作:

char * Rotate90Array(int x, int y, char *array )
{
    printf("\nLine 179");
    // These have to be swapped because the image is being rotated
    char *RotatedArray = malloc(x * y * sizeof(char));
    printf("\nLine 182");
    int u = x - 1;
    int v = y - 1;
    int i = 0;
    int j = 0;
    printf("Line 187\n");
    char *ptr;
    printf("Line 189\n");
    ptr = RotatedArray;             //I add this line
    for (i = 0; i < x; i++)
    {
        printf("Line 192\n");
       // *ptr = RotatedArray[i];   //I delete this line 
        printf("Line 194\n");
        for (j = 0; j < y; j++)
        {
            printf("Line 197\n");
//          *ptr = *(array[u-j][i]);
            *(ptr+((j*x)+(u-i))) = *(array+((i*y)+j));
            printf("Line 200\n");
        //    ptr++;                // I delete this line
            printf("Line 202\n");
        }
    }
    printf("Line 205\n");
    return RotatedArray;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM