Я получаю 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
Я не могу гарантировать, что утечка памяти на linux отсутствует, но программа обрабатывает большие наборы данных (50 наборов из 100-200 изображений) до завершения. – Jake
Предполагая, что у вас есть около 48 байтов в стеке для каждого call, 171000 вызовов потребует около 8 МБ стека. Таким образом, ваша Linux-машина, очевидно, настроена для большего стека, чем ваша машина для Windows. – user3386109
Не имеет значения, что рекурсия является хвостовой рекурсивной? – Jake