Ошибка сегментирования(стек памяти сброшен на диск)

Не понимаю,что вызвало ошибку в коде(я предполагаю, что двумерный массив,но не уверен), как её исправить и в чём она? Вот код:

#include <iostream>
#include <string>

using namespace std;

int main() {
  setlocale(LC_ALL,"rus");
  string comm,memb[1000],info[12][100];
  int n,num[1000];
  double membmoney[1000];

  cout << "Введите количество сотрудников: ";
  cin >> n;

  for (int i = 0; i < n; ++i) {
    membmoney[i] = 0;
    memb[i] = "Сотрудник не найден";
  }

  cout<< "Введите имя и фамилию вашего сотрудника через '_'" << endl;

  for (int i = 0; i < n; ++i) {
    cin >> memb[i];
  }
  cout << "Для начала напишите 'start'" << endl;

  cin >> comm;

  while (comm != "exit") {

    cout << "Выберите комманду:" << endl;
    cout << "0 - Запросить список всех сотрудников" << endl;
    cout << "1 - Запись значения зарплат для всех" << n << " сотрудников" << endl;
    cout << "2 - Изменение зарплаты определённого сотрудника" << endl;
    cout << "3 - Изменение зарплаты сотрудника на определённый процент" << endl;
    cout << "4 - Изменение зарплаты всех сотрудников на определённый процент" << endl;
    cout << "5 - Вывод информации о зарплате по определённому сотруднику" << endl;
    cout << "6 - Вывод информации о зарплате по всем сотрудникам компании" << endl;
    cout << "7 - Удаление сотрудника из базы" << endl;
    cout << "8 - Информация обо всех выплатах каждому из сотрудников за год" << endl;
    cout << "exit - Выход" << endl;

    cin >> comm;

    //0
    if (comm == "0") {
      for (int i = 0; i < n; ++i) {
        cout << memb[i] << " " << i + 1 << endl;
      }
    }

    //1
    if (comm == "1") {
      cout << "Введите зарплату сотрудника" << endl;
      int sum;
      for (int i = 0; i < n; ++i) {
        int a = num[i];
        cin >> sum;
        membmoney[i] = sum;
        info[i][a] = "Сотруднику_номер_начислено_рублей";
        num[i] += 1;
      }
    }

    //2
    if (comm == "2") {
      cout << "Введите номер сотрудника и сумму изменения" << endl;
       int num,sum;
       cin >> num >> sum;
       membmoney[num - 1] += sum;
    }

    //3
    if (comm == "3") {
      cout << "Введите процент изменения и номер сотрудника" << endl;
      int proc, num;
      cin >> proc >> num;
      membmoney[num - 1] *= proc/100 + 1;
    }

    //4
    if (comm == "4") {
      cout << "Введите процент изменения";
      int proc;
      cin >> proc;
      for (int i = 0; i < n; ++i) {
        membmoney[i] *= proc/100 + 1;
      }
    }

    //5
    if (comm == "5") {
      cout << "Введите номер сотрудника: ";
      int num;
      cin >> num;
      cout<< "Зарплата сотрудника номер "<< num << ": "<< membmoney[num + 1] << " р.";
    }

    //6
    if (comm == "6") {
      for (int i = 0; i < n; ++i) {
        cout << memb[i] << " - " << membmoney[i] << " р." << endl;
      }
    }

    //7
    if (comm == "7") {
      n -= 1;
      cout << "Введите номер сотрудника, которого нужно удалить";
      int num;
      cin >> num;
      num -= 1;
      for (int i = num; i < n; ++i) {
        memb[i] = memb[i + 1];
      }
    }
  }

  //Andrey_Sitalo Marat_Zhurkin Name_Surname Namesur_Eman Imya_Familiya это для тестов имена
  return 0;
}

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

Автор решения: AlexGlebe

Массив int num[1000]; при старте программы без начальных значений и равен по сути случайным индексам. Модификация массива info

int a = num[i];
...
info[i][a] = "Сотруднику_номер_начислено_рублей";

со случаным индексом a = num[i] приводит к ошибке памяти.

Задайте сначала эти значения нулю или коротко так :

int num[1000] = {};
→ Ссылка
Автор решения: Андрей Ситало

Короче, зачастую, чтобы это исправить надо расширить стэк. Вот тут вам всё объяснят.

→ Ссылка