Wartość zwracana przez program nie da ci wiele informacji poza tym, że program nie działa prawidłowo no chyba, że gdzieś dasz coś innego, niż "return 0;". Na przykład "return 1;". Ta wartość jest dość nieprzewidywalna.
Spróbuj znaleźć za pomocą debuggera (brackpointy), gdzie program kończy swoje działanie, lub ewentualnie w różnych miejscach wypisuj jakieś informacje i sprawdzaj co się wypisze, a co nie. Tylko lepiej takie debug message wypisać na stderr zamiast stdout, bo stdout jest buforowane i w niektórych przypadkach może się nie wyświetlić na ekranie pomimo poprawnego zadziałania programu.