Программа C abort() запрещает доступ к .exe после завершения

Делая разные основы в C, я обнаружил ошибку, для которой до сих пор не было найдено ответа в Интернете.

Использование TCC в Windows 10 в командной строке:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

int main(int argc, char **argv) {
    abort(); //or assert()
    return 0;
}

Сначала проблема возникла с некоторым фиктивным выражением в assert() (например, assert(1==0); ), которое вызывает abort(). Остальной код, до abort(), представляет собой только список printfs с несколькими sizeof, и ничего не пошло не так, пока я не добавил assert/abort. Программа завершается там, где должна. Затем я не могу написать (перекомпилировать) или удалить .exe. Глядя в список задач, программа указана столько раз, сколько она была запущена. Кажется, застрял «где-то». %ERRORLEVEL% дает 3. Я должен убить их с правами администратора.

(Я попробовал код на Ubuntu с помощью gcc, и все прошло хорошо.)


person Sébastien    schedule 04.10.2020    source источник
comment
Можете ли вы точно сказать, как вы запускаете программу?   -  person Nate Eldredge    schedule 04.10.2020
comment
Я думаю, это нормально, что вы не можете удалить или перезаписать exe-файл во время работы программы. Так что вопрос в том, почему он до сих пор работает. Я мало что знаю о Windows, но мне было бы интересно, есть ли какая-то функция отчетов о сбоях, которая поддерживает ее в рабочем состоянии, пока она регистрирует сбой или, возможно, ожидает какого-то подтверждения.   -  person Nate Eldredge    schedule 04.10.2020
comment
stackoverflow .com/questions/37019889/ предполагает, что вызов abort() в Windows вызывает всплывающее окно сообщения. Интересно, ждет ли программа завершения до тех пор, пока окно не будет закрыто, и, возможно, вы не видите окно (например, оно находится на другом дисплее или скрыто другими окнами).   -  person Nate Eldredge    schedule 04.10.2020
comment
@Nate Eldredge Я запускаю программу из командной строки. Я также пытался запустить, нажав на .exe из проводника. Я перезагрузил свой компьютер, и задачи, которые не были убиты, все еще выполняются.   -  person Sébastien    schedule 04.10.2020
comment
Некоторые экземпляры нельзя убить даже с правами администратора.   -  person Sébastien    schedule 04.10.2020
comment
Может актуально... что такое ТСС? Компилятор Tiny C? компилятор Turbo C? что-то другое?   -  person pmg    schedule 04.10.2020
comment
Итак, чтобы уточнить, возникает ли проблема с минимальным примером, который вы разместили, или только с другим примером (с printfs и т. д.)?   -  person Nate Eldredge    schedule 04.10.2020


Ответы (1)


Я удалил ZoneAlarm и все стало нормально. Похоже, что по умолчанию этот брандмауэр может держать активной командную строку .exe, которые возвращают значение при выходе (returnвыходabortутвердить).

person Sébastien    schedule 07.10.2020