Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
1

Программа аварийно завершается при прохождении цикла

04.06.2012, 00:48. Показов 2196. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
 
 QVector<int> Set;
    QPair <int,int> Map[8];
    int c=0,Num,;
 
   srand(time(NULL));
    while(c<9){
 
        Num=rand()%9;
//при первом прохождении цикла умирает на этой строчке(т.е. рандом делает и помер)
 
        if (Set.indexOf(Num)==-1){
 
            Set<<Num;
            Obj[c].Number=Num;
            Obj[c].F=Map[Num].first;
            Obj[c].S=Map[Num].second;
            
            QMessageBox::about(0,"",QString::number(Num)+"    "+QString::number(Map[Num].first)+"   "+QString::number(Map[Num].second));
 
            c++;
        }
    }
что не так?
написано в qt
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2012, 00:48
Ответы с готовыми решениями:

При открытия файла аварийно завершается программа
Пишу меди плеер , при открытия файла программа завершаться аварийно, вот код программы using...

Программа завершается аварийно при вызове функции
Делаю консольное приложение на шестом Билдере. Не могу найти ошибку.Убил день. Прога компилиться...

При вводе данных в объект программа аварийно завершается
Здравствуйте. В процессе выполения лаб.работы столкнулась с такой проблемой. Вот мое задание:...

Программа аварийно завершается
Доброго времени суток! Моя программа аварийно завершается вернув значение &quot;255 (0xFF)&quot; Прошу...

10
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
04.06.2012, 01:41 2
Что такое Obj? может это пустой контейнер, а вы к его элементам по индексу обращаетесь.
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.06.2012, 01:52  [ТС] 3
ихвиняюсь,забыл
вот заголовочный файл
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef OBJ_H
#define OBJ_H
#include <QtGui>
class cObj : public QLabel
{
    Q_OBJECT
 
public:
    int Top,Left,Position,TruePosition,Number,F,S;
    bool Enabled;
    QPixmap Img;
 
    bool IsEnable();
protected:
    virtual void mousePressEvent(QMouseEvent* ev);
    virtual void mouseMoveEvent(QMouseEvent* ev);
   // virtual void mouseReleaseEvent(QMouseEvent *ev;
 
};
 
#endif // OBJ_H
Добавлено через 44 секунды
cObj Obj[8];

с этим все окей
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
04.06.2012, 01:54 4
это класс, инстансы которого хранятся в Obj. А что такое Obj? Массив, вектор, что-то еще?
Obj[c] - вот это обращение к элементу по индексу.
Если Obj - пустой контейнер, то так делать нельзя.
И неужели в дебаг режиме нельзя прогу запустить и посмотреть где и при каких обстоятельствах падает?
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.06.2012, 01:57  [ТС] 5
ошибка возникает на строке (Set.indexOf(Num)==-1){
0
60 / 60 / 6
Регистрация: 28.05.2012
Сообщений: 222
04.06.2012, 11:54 6
Приведи полный тестовый пример. Потому что строка
C++ (Qt)
1
int c=0,Num,;
явно вызовет ошибку компиляции.
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.06.2012, 12:16  [ТС] 7
C++ (Qt)
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
void cLoauding::Random(){
 
    QVector<int> Set;
    QPair <int,int> Map[8];
    int c=0,Num,f=0,s=0,schet=1;
 
    for (int i=0;i<9;i++){
 
        Map[i].first=f;
        Map[i].second=s;
 
        s++;
        if (schet%3==0){
 
            f++;
            s=0;
        }
 
        schet++;
    }
 
    srand(time(NULL));
    while(c<9){
 
        Num=rand()%9;
 
        if (Set.indexOf(Num)==-1){
 
            Set<<Num;
            Obj[c].Number=Num;
            Obj[c].F=Map[Num].first;
            Obj[c].S=Map[Num].second;
 
            QMessageBox::about(0,"",QString::number(Num)+"    "+QString::number(Map[Num].first)+"   "+QString::number(Map[Num].second));
 
            c++;
        }
    }
}
повторюсь,ошибка на функции Set.indexOf точно
0
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
04.06.2012, 12:39 8
Цитата Сообщение от spydark91 Посмотреть сообщение
cObj Obj[8];
Цитата Сообщение от spydark91 Посмотреть сообщение
while(c<9){
Что-то мне подсказывает, что с indexOf всё хорошо.
0
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.06.2012, 15:09  [ТС] 9
меньше 9,следовательно на 8 он занакчивает.

просто я проверял , вставляя сообщения после ранодма и после входа в блок if сообщение после рандома вылазило,а в блоке if нет, следовательно дело в indexOf()
0
Почетный модератор
11525 / 4320 / 448
Регистрация: 12.06.2008
Сообщений: 12,412
04.06.2012, 16:35 10
Цитата Сообщение от spydark91 Посмотреть сообщение
меньше 9,следовательно на 8 он занакчивает.
cObj Obj[8] означает, что элементы могут быть от 0 до 7... а условие while(c<9) означает, что тут "c" может принять значение 8, которое выйдет за пределы массива. Дальнейшее поведение непредсказуемое.
1
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
04.06.2012, 20:22  [ТС] 11
тупанул ппц
описывается это в Loauding.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef LOAUDING_H
#define LOAUDING_H
#include <string>
#include <QtGui>
#include <Obj.h>
class cLoauding : public QObject {
    Q_OBJECT
public:
    QString OriginalPicturePath;
    QPixmap OriginalPicture;
    QLabel OriginalPict;
    QGridLayout LayoutShavedPicter;
    QGridLayout LayoutMain;
    cObj Obj[8];          //меняю на 9 и программа не запускается!!!!
    int FWidth,FHeight;
    QWidget Form1;
компилируется все нормально
Запускается D:\Soft\OtSDK\Projects\Picture\Match_Picture-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\debug\Match_Picture.exe...
Программа неожиданно завершилась.
D:\Soft\OtSDK\Projects\Picture\Match_Picture-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\debug\Match_Picture.exe завершился с кодом -1073741819


как такое может быть?

Добавлено через 1 час 7 минут
вообще не понимаю в чем дело...
Запускается D:\Soft\OtSDK\Projects\Picture\Match_Picture-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\debug\Match_Picture.exe...
Программа неожиданно завершилась.
D:\Soft\OtSDK\Projects\Picture\Match_Picture-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK_________\debug\Match_Picture.exe завершился с кодом -1073741819

main.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <QtGui/QApplication>
#include "mainwindow.h"
#include <QTextCodec>
#include <QtGui>
#include <Loauding.h>
 
int main(int argc, char *argv[])
{
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
    QApplication a(argc, argv);
    cLoauding Loading;
 
    Loading.Start();
 
    return a.exec();
}
Obj.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef OBJ_H
#define OBJ_H
#include <QtGui>
class cObj : public QLabel
{
    Q_OBJECT
 
public:
    int Top,Left,Position,TruePosition,Number,F,S;
    bool Enabled;
    QPixmap Img;
 
    void setDark();
 
    bool IsEnable();
protected:
    virtual void mousePressEvent(QMouseEvent* ev);
    virtual void mouseMoveEvent(QMouseEvent* ev);
   // virtual void mouseReleaseEvent(QMouseEvent *ev;
 
};
 
#endif // OBJ_H
Obj.cpp
C++ (Qt)
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
#include <Obj.h>
 
 
int x,y,Px,Py;
 
void cObj::mousePressEvent(QMouseEvent *ev){
 
    ::Px=ev->x();
    ::Py=ev->y();
 
 
}
 
void cObj::mouseMoveEvent(QMouseEvent *ev){
 
    setGeometry(Left+ev->x()-::Px,Top+ev->y()-::Py,width(),height());
    //наверз ее,чтоб не мигала
 
}
 
void cObj::setDark(){
 
    QPainter line(&Img);
 
    line.setBrush(QBrush(Qt::black,Qt::Dense5Pattern));
    line.drawRect(0,0,width(),height());
    line.end();
}
Loauding.h
C++ (Qt)
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
#ifndef LOAUDING_H
#define LOAUDING_H
#include <string>
#include <QtGui>
#include <Obj.h>
class cLoauding : public QObject {
    Q_OBJECT
public:
    QString OriginalPicturePath;
    QPixmap OriginalPicture;
    QLabel OriginalPict;
    QGridLayout LayoutShavedPicter;
   // QGridLayout LayoutMain;
    cObj Obj[9];
    int FWidth,FHeight;
    QWidget Form1;
 
 
 
 
    void Start();
    void Random();
 
 
 
 
 
public slots:
    void SetPicture();
signals:
    void ShaveSignal();
 
 
 
};
#endif // LOAUDING_H
Loauding.cpp

C++ (Qt)
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#include <Loauding.h>
#include <QDialog>
#include <math.h>
#include <stdlib.h>
#include <time.h>
 
QGridLayout* LayoutMain = new QGridLayout;
 
void cLoauding::SetPicture(){
    OriginalPicturePath="";
    OriginalPicturePath=QFileDialog::getOpenFileName(0,QObject::tr("Выберите картинку"),"","*.jpg *.bmp");
    if (OriginalPicturePath!=""){
      OriginalPicture.load(OriginalPicturePath);
 
      int SH=OriginalPicture.height()/3;
      int SW=OriginalPicture.width()/3;
 
      //---------------------------------------------------------------------------------------------------------------
 
      QPainter line(&OriginalPicture);
      line.setPen(QPen(Qt::red,2,Qt::DashLine));
      line.setRenderHint(QPainter::Antialiasing,true);
      line.drawLine(QPointF(SW,0),QPointF(SW,3*SH));
      line.drawLine(QPointF(2*SW,0),QPointF(2*SW,3*SH));
 
      line.drawLine(QPointF(0,SH),QPointF(3*SW,SH));
      line.drawLine(QPointF(0,2*SH),QPointF(3*SW,2*SH));
 
     // line.setBrush(QBrush(Qt::black,Qt::Dense5Pattern));
     // line.drawRect(0,0,3*SW,3*SH);
 
      line.end();
 
      //---------------------------------------------------------------------------------------------------------------
 
      Form1.setGeometry(Form1.x(),Form1.y(),610,510);
      OriginalPicture=OriginalPicture.scaled(510,510,Qt::KeepAspectRatio,Qt::SmoothTransformation);
      OriginalPict.setPixmap(OriginalPicture);
      OriginalPict.setAlignment(Qt::AlignTop);
 
      SH=OriginalPicture.height()/3;
      SW=OriginalPicture.width()/3;
 
      int c=0;
      for (int i=0;i<3;i++){
          for (int u=0;u<3;u++){
 
            
 
              Obj[c].Img=OriginalPicture.copy(u*SW,i*SH,SW,SH);
              Obj[c].setPixmap(Obj[c].Img);
              Obj[c].setDark();
 
              c++;
          }
      }
 
      Random();
 
      for (int i=0;i<8;i++){
 
          LayoutShavedPicter.addWidget(&Obj[i],Obj[i].F,Obj[i].S,Qt::AlignCenter);
      }
 
    }
    else{
        QMessageBox::critical(0,QObject::tr("Ошибка"),QObject::tr("Открытие файла не возможно.\nНе указан путь."),QMessageBox::Ok);
    }
 
 
 
};
void cLoauding::Start(){
 
    QGridLayout* LayoutButtons = new QGridLayout;
    QPushButton* ButLoaud = new QPushButton(QObject::tr(" Загрузить картинку "));
    QPushButton* ButRefresh = new QPushButton(QObject::tr("Обновить"));
    QPushButton* ButMatchTrue = new QPushButton(QObject::tr("Собрать"));
 
    //---------------------------------------------------------------------------------------------------------------
 
    ButRefresh->setEnabled(false);
    ButMatchTrue->setEnabled(false);
 
    //---------------------------------------------------------------------------------------------------------------
 
    LayoutButtons->addWidget(ButLoaud,0,0,Qt::AlignTop);
    LayoutButtons->addWidget(ButRefresh,0,1,Qt::AlignTop);
    LayoutButtons->addWidget(ButMatchTrue,0,2,Qt::AlignTop);
 
    ::LayoutMain->addLayout(LayoutButtons,0,0,1,2);
    ::LayoutMain->addWidget(&OriginalPict,1,0,Qt::AlignTop|Qt::AlignLeft);
    ::LayoutMain->addLayout(&LayoutShavedPicter,1,1,Qt::AlignTop|Qt::AlignRight);
 
    //---------------------------------------------------------------------------------------------------------------
 
    QObject::connect(ButLoaud,SIGNAL(clicked()),this,SLOT(SetPicture()));
 
 
    Form1.setWindowTitle("Match Picture");                      //нажимаю отладку,стрелочка на эту строчку указывает
    Form1.setLayout(::LayoutMain);
    Form1.setGeometry(Form1.x(),Form1.y(),350,100);
    Form1.move((QApplication::desktop()->width()-Form1.width())/2,(QApplication::desktop()->height()-Form1.height())/2-200);
    Form1.show();
 
 
 
 
}
 
 
 
void cLoauding::Random(){
 
    QVector<int> Set;
    QPair <int,int> Map[9];
    int c=0,Num,f=0,s=0,schet=1;
 
    for (int i=0;i<9;i++){
 
        Map[i].first=f;
        Map[i].second=s;
 
        s++;
        if (schet%3==0){
 
            f++;
            s=0;
        }
 
        schet++;
    }
 
    srand(time(NULL));
    while(c<9){
 
        Num=rand()%9;
 
 
 
 
        if (Set.indexOf(Num)==-1){
 
            Set<<Num;
            Obj[c].Number=Num;
            Obj[c].F=Map[Num].first;
            Obj[c].S=Map[Num].second;
 
            QMessageBox::about(0,"",QString::number(Num)+"    "+QString::number(Map[Num].first)+"   "+QString::number(Map[Num].second));
 
            c++;
        }
 
 
    }
}


только что онормально запускалось..
0
04.06.2012, 20:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2012, 20:22
Помогаю со студенческими работами здесь

программа завершается аварийно
запускаю компилятор, все запустилось, работает (меню из кучи условий if-else). выбираю любой пункт...

Работа с матрицами (программа завершается аварийно)
Помогите, на Си, не С++. Выдает другие значения, к тому же аварийно завершает программу Для...

Рекурсия, почему программа завершается аварийно?
Подскажите, почему не работает рекурсия?? #include &lt;iostream&gt; using namespace std; void fn(int...

Программа на других компьютерах завершается аварийно
Здравствуйте, у меня дикая проблема: я написал программу (кинуть код не могу, он очень большой,...

Программа аварийно завершается после оператора scanf
Такая проблема. Я начинающий. Занимаюсь уже вторую неделю. Написал такой код, запускаю программа....

Цикл: при прохождении цикла FOR программа неверно считает количество символов '+,-,*'
Доброго времени суток! У меня проблема с циклом FOR в Turbo Pascal'е. Проблема заключается в том,...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru