Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простецкая программка на С++, не знаю как правильно понять ошибку / 3 сообщений из 3, страница 1 из 1
23.12.2012, 18:13
    #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
23.12.2012, 19:01
    #38089822
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Простецкая программка на С++, не знаю как правильно понять ошибку
drcosmoЧто здесь может быть за ошибочка, простите за тупость?

Строки со столбцами попутаны. Цикл по к идёт до cols_cnt, а потом к с какого-то перепою
используется в первом индексе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.04.2013, 17:02
    #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
Форумы / C++ [игнор отключен] [закрыт для гостей] / Простецкая программка на С++, не знаю как правильно понять ошибку / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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