2016-05-26 3 views
0

Я получаю segfault в Windows, но не в Linux (в той же программе). Используя GDB (minGW), я получаю следующую информацию:Segfault в Windows, но не Linux (информация GDB включена) - C

Программный сигнал SIGSEGV, ошибка сегментации. 21 0x7c8024f0 в ReleaseMutex() из C: \ WINDOWS \ system32 \ kernel32.dll

Программа завершается в системе Linux. Крах во время рекурсивного вызова в этой функции:

void recursive_paint_char(int x,int y,int **inimage,int new_color,int fore_color) 
{ 

/* 
    This routine paints the connected object around the pixel x,y in image inimage 
    to the color new_color. The foreground color is assumed to be fore_color. 
*/ 
int  i; 
int  xt,yt; 

inimage[x][y]=new_color; 
for (i=0;i<8;i++) 
{ 

    xt=x+xc[i]; 
    yt=y+yc[i]; 
    if (inimage[xt][yt]==fore_color) 
    { 
    printf("this statement prints\n"); 
    recursive_paint_char(xt,yt,inimage,new_color,fore_color); 
    printf("this statement never prints\n"); 
    } 
} 
} 

рекурсия идет около 171000 звонков перед тем segfaulting

+0

Я не могу гарантировать, что утечка памяти на linux отсутствует, но программа обрабатывает большие наборы данных (50 наборов из 100-200 изображений) до завершения. – Jake

+2

Предполагая, что у вас есть около 48 байтов в стеке для каждого call, 171000 вызовов потребует около 8 МБ стека. Таким образом, ваша Linux-машина, очевидно, настроена для большего стека, чем ваша машина для Windows. – user3386109

+0

Не имеет значения, что рекурсия является хвостовой рекурсивной? – Jake

ответ

0

user3386109 ответил на вопрос - проблема, как представляется, размер стека.

Смежные вопросы