Top.Mail.Ru
Ответы

Ошибка -1073741571 в коде C++

После запуска кода появляется ошибка (процесс номер) завершил работу с кодом -1073741571
Код не дописан и может выглядеть криво, заранее извиняюсь

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
 #include <iostream> 
#include <windows.h> 
#include <thread> 
#include <chrono>  
#include <fstream> 
#include <cmath> 
#include <random> 
#include <iomanip> 
 
using namespace std; 
//2.01e19 лет  1 год = 3.15569259747e7 с 
//8.6e-23 c 
 
int decay() { 
	return 0; 
} 
 
int main() { 
	setlocale(LC_ALL, "Ru"); 
	srand(time(NULL)); 
	int a{0}; 
	double qtt[118][178];char types[118][178][11];double prbt[118][178][10];double period[118][178]; 
	cout << "Программа анализа ядерных реакций фёдора 0.1!" << endl; 
	cout << "Выберите режим работы (1 -- запись) "; cin >> a; 
	 
	for (int i = 0; i < 118;i++) { 
		for (int j = 0; j < 178;j++) { 
			qtt[i][j] = 0; 
			types[i][j][0] = 0; 
			period[i][j] = 8.6e-23; 
		} 
	} 
 
	ofstream file_in("Data.txt", ios_base::out); 
	if (a == 0) { 
		for (int i = 0; i < 2;i++) { 
			for (int j = 0; j < 8;j++) { 
				int qttv; 
				cout << "количество вариантов ";cin >> qttv; 
				types[i][j][0] = qttv; 
				for (int k = 0; k < qttv; k++) { 
					cout << i + 1 << " " << j + i + 1 << " " << "stable s / alpha a / beta- b / beta+ c / neutron n / proton p / b- n d / b- a e / b- b- f / b+ b+ g" << endl; 
					cin >> types[i][j][k + 1]; 
					cout << "вероятность ";cin >> prbt[i][j][k]; 
				} 
				cout << "период ";cin >> period[i][j]; 
			} 
		} 
	} 
	 
	for (int i = 0; i < 118;i++) { 
		for (int j = 0; j < 177;j++) { 
			file_in << qtt[i][j] << endl; 
			file_in << period[i][j]; 
			for (int k = 0; k < types[i][j][0]; k++) { 
				file_in << types[i][j][k+1] << endl; 
				file_in << prbt[i][j][k] << endl; 
			} 
		} 
	} 
	file_in.close(); 
 
	//ifstream file_out("Data.dat"); 
	//file_out.close(); 
} 

Отладчик говорит:
Необработанное исключение по адресу 0x00007FF63CC2C567 в распад.exe: 0xC00000FD: Stack overflow (параметры: 0x0000000000000001, 0x000000355E213000).

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

qttt: 118 * 178 * 8 = 168032 байта
types: 118 * 178 * 11 * 1 = 231044 байта
prbt: 118 * 178 * 10 * 8 = 1680320 байт
period: 118 * 178 * 8 = 168032 байта

И всё это ты пытаешься разместить в стеке, который совсем не резиновый.

Вынеси все свои массивы в статическую память:

1234567891011
 
// размещаем это ПЕРЕД main
double qtt[118][178];
char types[118][178][11];
double prbt[118][178][10];
double period[118][178];

int main() {
  // а вот из main создание массивов убираем
  ...
} 
Аватар пользователя
Ученик
1мес

Ошибка Stack overflow (переполнение стека) возникает из-за того, что вы выделяете слишком большие массивы в стеке.

Аватар пользователя
Гуру
1мес

скорее всего ошибка с считываем файла