Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Из-за чего возникает необработанное исключение и как его исправить? Программа в C++

Текст проги
#pragma once

#include "Machine.h"
#include "Const.h"
#include
#include
#include

using namespace std;

const size_t ARRAY_SIZE = 6;

class Initializer
{
private:
unsigned int argc;
const char** argv;
vector *commandFile;
size_t start_str;
size_t start_pos;

void findStartProgramm() {
for (start_str = 0; start_str < commandFile->size(); ++start_str)
{
for (start_pos = 0; start_pos < (*commandFile)[start_str].size(); ++start_pos)
{
if ((*commandFile)[start_str][start_pos] == Symbol::startProgramm) {
return;
}
}
}
throw exception("Начало файла не найдено");
} ТУТ ОШИБКА "ИСКЛЮЧЕНИЕ НЕ ОБРАБОТАНО"

void fillVector() {
const char* file = argv[1];
if (file == nullptr) {
throw("undef_arg");
}

ifstream inputFile(file);
string temp;
while (getline(inputFile, temp)) {
commandFile->push_back(temp);
}
}
public:
Initializer(const int argc, const char* argv[]) {
this->argc = argc - 1;
this->argv = argv;

commandFile = new vector();
}
Machine* init() {
fillVector();

findStartProgramm();

Machine* machine = new Machine(commandFile, start_str, start_pos);
return machine;
}
};

По дате
По рейтингу
Аватар пользователя
Новичок

очевидно, программа доходит до строчки с throw, бросает исключение, а выше по стеку нет никаких try..catch, и исключение вылетает из main
в первую очередь тебе нужно понять, почему выполнение вообще доходит до исключения и может ли программа продолжать работу, если оно бросается

ты с джавы или чего-то похожего на плюсы перешёл?
у тебя весь код в утечках, ты ни один new не освобождаешь
не используй сырые указатели, если не умеешь ими пользоваться

Аватар пользователя
Мыслитель

Сочувствую компилятору. Конечно исключение не обработано, если его не обрабатывать :-)
В чем глубокий смысл возвращать результат функции void findStartProgramm() через исключение? Может проще сделать её bool? Я бы вообще int сделал, чтобы возвращать позицию или -1, если не найдено.

Аватар пользователя
Искусственный Интеллект

Оформи код нормально, тогда и можно будет понять, что у тебя не так.