簡體   English   中英

分段故障C(從1d陣列到2d陣列再返回)

[英]Segmentation Fault C (1d array to 2d array and back)

我得到一個1d數組,其中包含圖像像素的顏色值。 數組的大小為cols * rows。 我想更改特定區域的顏色。 給該函數調用一維數組,其大小,左,上,下,右以及所需的顏色。 我試圖做的是將1d數組的值復制到2d數組中,對2d數組進行操作,然后將新值復制回1d數組。 我不斷收到細分錯誤錯誤。 這是代碼:

void region_set( uint8_t array[], 
         unsigned int cols, 
         unsigned int rows,
         unsigned int left,
         unsigned int top,
         unsigned int right,
         unsigned int bottom,
         uint8_t color )
{

    if(!(left == right || top == bottom)){

        uint8_t Array2[cols][rows];

        int x, y;

        for(int i= 0; i < rows * cols; i++){            
            x = i / rows;
            y = i % cols;
            Array2[y][x] = array[i];
        }

        for(int y=left; y < right-1; y++){
             for(int x = top; x < bottom-1 ; x++){
                Array2[y][x] = color;
            }
        }

        for(int i= 0; i < rows * cols; i++){            
            x = i / rows;
            y = i % cols;
            array[i] = Array2[y][x];
        }

    }   
}

我使用此代碼來水平鏡像圖像,並且可以正常工作:

    for(int x=0; x<cols; x++){
 for(int y =0; y< rows/2; y++){

    holdVal=array[x + y * rows];
    array[x + y * rows] = array[(rows-1-y)* rows + x];
    array[(rows-1-y) * rows + x] = holdVal;

    }
}

然后,我對其進行了調整以嘗試使其適用於region_set函數:

for(int y=left; y< right-1; y++){
         for(int x = top; x< bottom - 1; x++){
            array[x + y * cols] = color;
        }
    }

到目前為止沒有運氣。

你應該做 :

 int k = 0;
 for(int i = 0; i < rows; ++i)
 {
     for(int j = 0; j < cols; ++j)
     {
          array[k++] = Array[i][j];
          // or
          Array[i][j] = array[k++];
     }
 }

除此之外,您的代碼看起來有些混亂,只需采用這種方法即可。 您似乎還寫了[cols] [rows],而不是[rows] [cols]!

暫無
暫無

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

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