Почему программа на C++ в VS Code при ошибках начинает ломать компьютер?

Возможно, моя проблема слишком специфическая, чтобы её можно было воспроизвести на другом компьютере, но всё же...

Я заметил, что по какой-то причине практически любое неопределённое поведение в моих программ на C++ заканчивается очень странными "симптомами":

  • потеря возможности остановить программу в IDE (кнопка просто не реагирует)
  • странные баги операционной системы (например, отключение проводника вместе с рабочим столом)
  • прекращение работы кнопок "перезагрузка", "завершение работы" и т. д.
  • поломка встроенных приложений Windows (опционально)

Как-то у меня перестал работать журнал буфера обмена (надо сказать, он до сих не открывается), и сейчас этот замечательный "комплекс" выполняется после каждого неудачного запуска. Мне приходится перезагружать компьютер кнопкой питания.

В данном случае неопределённое поведение возникает в результате отсутствия файла IntegratorUI.jar:

#include <jni.h>
#include <cstring>
#include "Integrator.hpp"

using namespace std;

int main(int n,char*args[]){
    for(int i=0;i<n;i++){
        if(strcmp(args[i],"-ui")==0){
            checkAccess();
            JavaVM*jvm;
            JNIEnv*env;
            JavaVMOption opt[1];
            opt->optionString=const_cast<char*>("-cp ./IntegratorUI.jar");
            JavaVMInitArgs jargs;
            jargs.nOptions=1;
            jargs.options=opt; 
            JNI_CreateJavaVM(&jvm,(void**)&env,&jargs);
        }
    }
}

void checkAccess(){}

Сдаётся мне, даже неопределённое поведение не должно портить мне компьютер.

Кто-нибудь знает, как это исправить? Может, есть какие-то настройки в VS Code, позволяющие запустить программу так, чтобы в случае чего она просто остановилась?


Ответы (1 шт):

Автор решения: Nikolai Vorobiev

По идее для работы VS, XCode выделяют виртуальную память, чтобы избежать повреждений информации на самом компьютере(даже самой ОС), скорее всего у Вас выделяется не виртуальная память, а самого компьютера…

→ Ссылка