Почему код завершается с кодом 0?
Код завершения процесса 0 - стандартный код обозначающий что всё завершилось без критичных проблем (т.е. успешно, хороошо).
На скриншотах никаких ошибок нет, только сообщения от дебаггера о загрузке стандартный dll файлов и завершении потоков.
Ноль - это хорошо. Отсутствие ошибок. Если ты хочешь возвращать какие-то
статусные коды из функции main - то ее надо объявить как-то так

int main(int argc, char **argv) {
   return 555;
}
И тогда операционка увидит 555 и можно делать какую-то логику принятия решений. В Windows кажется переменная %errorlevel%  отвечает за статусы.