2013-11-03 12 views
0

내 코드가 행렬 선언에 도달했을 때 SIGSEGV가 발생하고 그것에 대한 정보가 많지 않습니다. 이건 내 코드입니다 :SIGSEGV on matrix declaration

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} 

부호없는 문자의 코 피아 [수신] [Ry가] [3] 코드가 멈추고 나에게 SIGSEGV 오류를주는 곳입니다. Windows에서 코드 블록을 사용하고 있습니다. mingw suite와 함께 제공됩니다.

+3

[This (http://stackoverflow.com/questions/1847789/segmentation-fault-on-large-array-sizes)는 도움이되는 설명이 될 수 있습니다. ... – Recker

답변

4

Rx 및 Ry 값에 따라 배열이 스택에 비해 너무 클 수 있습니다. 예를 들어 둘 다 2000 인 경우, 이는 약 12 ​​메가 바이트이며, 기본적으로 스택에 대해 대부분의 OS가 예약하는 것보다 훨씬 큽니다.

+0

확인하기 때문에 문제가 될 것 같습니다. Rx와 Ry의 작은 값으로 확인하면 모든 것이 잘 동작합니다. 최대 값이 1200 일 수 있고 행렬이 [0,255] 범위의 값을 보유한다는 것을 고려하여 더 큰 값을 가진 동일한 함수를 사용할 수있는 방법이 있습니까? –

+0

질문에 대한 코멘트에 링크되어있는 질문을보십시오. 간단히 말해 --- 스택이 아닌 힙에 배열을 할당하십시오. –