2013-11-03 124 views
0

當我的代碼到達矩陣聲明時,我得到一個SIGSEGV,並且我沒有得到關於它的很多信息。這是我的代碼:矩陣聲明上的SIGSEGV

void mascaraLaPlace(unsigned char Img[1200][1200][3],int Rx,int Ry){ 
    int x,y,a,b,c,d; 
    int valorR,valorG,valorB; 
    unsigned char copia[Rx][Ry][3]; 
    for (y=0;y<Ry;y++){//operations} 

無符號的字符COPIA [RX] [RY] [3]是代碼停止,給我的SIGSEGV錯誤。 我正在使用mingw套件的窗口女巫的代碼塊。

+3

[This](http://stackoverflow.com/questions/1847789/segmentation-fault-on-large-array-sizes)可以是一個有用的解釋.... – Recker

回答

4

根據Rx和Ry的值,您的數組可能對於堆棧來說太大。例如,如果它們都是2000,那麼大概是12兆字節,遠遠超過大多數操作系統默認爲堆棧預留的空間。

+0

好吧,似乎是問題,因爲我只需檢查Rx和Ry的小值,一切正常。有沒有一種方法可以使用具有較大值的相同函數,因爲這兩個值的最大值可以是1200,而矩陣的值在[0,255]範圍內? –

+0

看看在你的問題的評論中鏈接的問題 - 答案很好。簡而言之---在堆上分配數組而不是堆棧。 –