Ошибка сегментирования(стек памяти сброшен на диск)
Не понимаю,что вызвало ошибку в коде(я предполагаю, что двумерный массив,но не уверен), как её исправить и в чём она? Вот код:
#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] = {};
Автор решения: Андрей Ситало
→ Ссылка
Короче, зачастую, чтобы это исправить надо расширить стэк. Вот тут вам всё объяснят.