powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простецкая программка на С++, не знаю как правильно понять ошибку
3 сообщений из 3, страница 1 из 1
Простецкая программка на С++, не знаю как правильно понять ошибку
    #38089776
drcosmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть программа, считывающая матрицу из input.txt

Затем тупо считает строки и столбцы, после чего ищет седловую (наименьший элемент в своем ряду и наибольший в своем столбце) точку матрицы.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
 setlocale(LC_ALL, "Russian"); // Для вывода русской кириллицы
 ifstream in("input.txt"); // input
 
 if(!in) {
   cout << "Нельзя прочитать файл\n";
   return 1;
 }

 int d;
 int cnt = 0;
 // получение количества целых чисел в файле
 while(!in.eof())
 {
       in >> d;
       cnt++;
 }

 char buf[256];
 int rows_cnt = 0;

 in.close();
 in.clear();
 in.open("input.txt");

 // получение количества строк
 while(!in.eof())
 {
       in.getline(buf, 255);
       rows_cnt++;
 }
 in.close();
 in.clear();

 // получение количества столбцов
 int cols_cnt = cnt/rows_cnt;

 // создание матрицы
 int **matrix = new int*[rows_cnt];
 for(int i=0; i<rows_cnt; i++)
       matrix[i] = new int[cols_cnt];

 in.open("input.txt");
 cout<<"\nИсходная матрица:"<<endl;
 // чтение и вывод на экран матрицы
 for(int i=0; i<rows_cnt; i++) {
	 for(int j=0; j<cols_cnt; j++) {
		 in>>matrix[i][j];
         cout<<matrix[i][j]<<" ";
       }
	 cout<<endl;
 }

 int max=0,min=32565,jmin,imax;
 // Ищем седловую точку матрицы.
 for(int i=0; i<rows_cnt; i++)
	 for(int j=0; j<cols_cnt; j++) {
		 if(matrix[i][j]<min) {
			 min=matrix[i][j];
			 jmin=j;
		 }
		 if(j==cols_cnt-1) {
			for(int k=0; k<cols_cnt; k++)
			if(matrix[k][jmin]>max) {
				max=matrix[k][jmin];
                imax=k;
			}
			if(max==min) {
				cout<<"\nСедловая точка в строке i = "<< imax+1 <<" столбца j = "<< jmin+1 << "."; 
			    cout <<" Значение "<< "matrix["<< imax <<"][" << jmin << "]" << "=" << matrix[imax][jmin] << endl;
			}
			min=32565;
			max=0;
		 }
	 }

 system("Pause");
 return 0;
}



Например на вход подается такая матрица:

автор5 6 4 5
-2 5 3 7
8 7 -2 6


После вывода матрицы на экран, в консоли возникает ошибка и закрывается.

Debug выдал: Unhandled exception at 0x00fe210f in Seminar_4.exe: 0xC0000005: Access violation reading location 0xfdfdfe05 () и указал на участок:
Код: plaintext
1.
2.
3.
4.
     if(matrix[k][jmin]>max) {
	max=matrix[k][jmin];
        imax=k;
	}



Что здесь может быть за ошибочка, простите за тупость?


Большое спасибо за подсказки и помощь!
...
Рейтинг: 0 / 0
Простецкая программка на С++, не знаю как правильно понять ошибку
    #38089822
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drcosmoЧто здесь может быть за ошибочка, простите за тупость?

Строки со столбцами попутаны. Цикл по к идёт до cols_cnt, а потом к с какого-то перепою
используется в первом индексе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Простецкая программка на С++, не знаю как правильно понять ошибку
    #38226322
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow)
{
  printf ("hi, world\n");

  try {
....
        if (tid[i]!=0) {
          th1 = OpenThread( THREAD_ALL_ACCESS, FALSE, tid[_hM]);
.....
  
  }
  catch(std::exception err ){
    printf ("runtime error '%s'/'%s'\n" , err.what(), GetLastError());
  }
  printf ("bye, bye\n");
  return 0;
}



в вызове
OpenThread( THREAD_ALL_ACCESS, FALSE, >>>>tid[_hM]<<<<);
не правильный индекс, вышел за пределы массива tid и получил эксепшен. Это понятно.

А почему он не ловится?
Я ж его в трай кач положил и самый родительский exception в catch
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простецкая программка на С++, не знаю как правильно понять ошибку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]