32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
1

Непонятная остановка программы

18.05.2014, 09:58. Показов 1191. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу понять в чем причина торможения программы. Запускаю ее, она виснет и не завершается. Все, что удалось выяснить - проблема с деструктором MATRIX. Просто если я его удаляю, то программа выполняется и закрывается, а тут выводит матрицу и виснет

C++
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
typedef class obj1 {
public:
    int sizew;
    int sizeh;
    int** matrix;
    obj1(int w, int h):sizew(w),sizeh(h){create();}
    obj1(            ):sizew(0),sizeh(0){}
    void free() {
        for (int i=0; i<sizew; i++) 
            delete[] matrix[i];
        delete[] matrix;
    }
private:
    void create(void) {
        matrix = new int*[sizew];
        for(int i=0; i<sizew; i++) {
            matrix[i] = new int[sizeh];
            for(int j=0; j<sizeh; j++)
                matrix[i][j] = 0;
        }
    }
} MATRIX; 
 
int main() 
{
    MATRIX matrix(MatrixSizeW,MatrixSizeH);
    MatrixRendering(matrix);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2014, 09:58
Ответы с готовыми решениями:

Полная остановка программы
Здравствуйте, подскажите как в c++ можно плностью остановить и выключить программу, что-бы часть...

Непонятная причина вылета программы
Добрый день, была поставлена задача написать программку, которая бы высчитывала кол-во повторений в...

Метод Монте-Карло(непонятная неработоспособность программы)
Написал программу, которая вычисляет интеграл методом Монте-Карло. Вроде как код проверял,...

Остановка выполнения консольной программы без system("pause")
Всем привет. Ищу нормальный способ, который работает всегда и везде. Такой способ это нормальный?...

3
Модератор
Эксперт С++
13407 / 10517 / 6283
Регистрация: 18.12.2011
Сообщений: 28,074
18.05.2014, 11:04 2
Вот этот код исполняется без проблем
C++
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
#include <iostream>
#include <fstream>
using namespace std;
typedef class obj1 {
public:
    int sizew;
    int sizeh;
    int** matrix;
    obj1(int w, int h):sizew(w),sizeh(h){create();}
    obj1(            ):sizew(0),sizeh(0){}
    ~obj1() {
        for (int i=0; i<sizew; i++) 
            delete[] matrix[i];
        delete[] matrix;
    }
private:
    void create(void) {
        matrix = new int*[sizew];
        for(int i=0; i<sizew; i++) {
            matrix[i] = new int[sizeh];
            for(int j=0; j<sizeh; j++)
                matrix[i][j] = 0;
        }
    }
} MATRIX; 
 
int main() 
{
    MATRIX matrix(2,2);
    //MatrixRendering(matrix);
}
Так что ищите проблему в MatrixRendering(matrix);
1
32 / 13 / 3
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
18.05.2014, 13:40  [ТС] 3
zss, Вроде все с функцией нормально. По крайней мере она матрицу рисует. Но после завершения этой функции должен быть выход из программы, но она виснет. Вот весь код с функцией

C++
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
#include <iostream>
#include <stdio.h>
#include <Windows.h>
using namespace std;
 
#define MatrixSizeW  10
#define MatrixSizeH  9
#define MatrixCoordX 30
#define MatrixCoordY 5
 
void CursorMove(int x, int y) {
    COORD pos = {x,y};
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorPosition(hConsole, pos);
}
 
typedef class obj1 {
public:
    int sizew;
    int sizeh;
    int** matrix;
    obj1(int w, int h):sizew(w),sizeh(h){create();}
    obj1(            ):sizew(0),sizeh(0){}
    ~obj1() {
        for (int i=0; i<sizew; i++) 
            delete[] matrix[i];
        delete[] matrix;
    }
private:
    void create(void) {
        matrix = new int*[sizew];
        for(int i=0; i<sizew; i++) {
            matrix[i] = new int[sizeh];
            for(int j=0; j<sizeh; j++)
                matrix[i][j] = 0;
        }
    }
} MATRIX; 
 
void MatrixRendering(MATRIX matrix) {
    for(int i=0; i<matrix.sizew; i++)
        for(int j=0; j<matrix.sizeh; j++) {
            CursorMove(MatrixCoordX+i, MatrixCoordY+j);
            printf("%d", matrix.matrix[i][j]);
        }
}
 
int main() 
{
    MATRIX matrix(MatrixSizeW,MatrixSizeH);
    MatrixRendering(matrix);
}
Добавлено через 4 минуты
Я вообще не пойму что за бред творится..

C++
1
2
3
4
5
6
7
int main() 
{
    MATRIX matrix(MatrixSizeW,MatrixSizeH);
    MatrixRendering(matrix);
    printf("ok");
    return 0;
}
Ок пишет, но консоль не закрывается

А если так пишу, то консоль закрывается (то есть проблема именно в программе)
C++
1
2
3
4
5
int main() 
{
    printf("ok");
    return 0;
}
0
Модератор
Эксперт С++
13407 / 10517 / 6283
Регистрация: 18.12.2011
Сообщений: 28,074
18.05.2014, 14:19 4
Лучший ответ Сообщение было отмечено Egor138 как решение

Решение

Нашлась ошибка. В MatrixRendering передавайте параметр по ссылке, а не по значению.
C++
1
void MatrixRendering(const MATRIX& matrix)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.05.2014, 14:19
Помогаю со студенческими работами здесь

Остановка программы без предложения "Нажать любую клавишу"
в чистых сях для остановки в конце программы (чтобы не закрылась) я юзал getch, а что юзать в...

Остановка программы
Здравствуйте, подскажите пожалуйста, как остановить программу на определенное время. К примеру...

Остановка выполнения программы....
Есть прога на Builder'е 6.0, можно ли по нажатии кнопки прекращать выполнение всех выполняющихся в...

Остановка многопоточной программы
Приветствую. Есть многопоточное консольное приложение (архиватор). Требуется организовать его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru