Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 03.07.2010
Сообщений: 7

Не понимаю, в чём ошибка

11.07.2010, 21:43. Показов 1548. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу GUI-приложение на Qt под windows. Запускаю прогу в режиме отладки. Выводится окно, всё нормально, но при нажатии на любую кнопку, ещё до перехода к обработке соответствующего сигнала возникает segmentation fault (и при дебаге, и при релизе). Понятия не имею, почему и как с этм бороться:
Миниатюры
Не понимаю, в чём ошибка  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.07.2010, 21:43
Ответы с готовыми решениями:

Не понимаю в чем ошибка. Show();
И так, учу QT по урокам Дениса Маркова, код пишу 1 в 1, но у него то работает. Вот код и ошибки. Сама ошибка пишет в 11 строке main.cpp ...

Ошибка -is not a valid integer value (не является допустимым целым значением), не понимаю в чем ошибка
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include...

Не понимаю в чем ошибка
function translitText($string) { $search = ; $replace = ; $string = str_replace($search,...

4
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.07.2010, 04:38
показывай код
0
0 / 0 / 0
Регистрация: 03.07.2010
Сообщений: 7
12.07.2010, 14:26  [ТС]
Тот же самый проект под линуксом показывает этот же segmentation fault но на строке return a.exec()

C++
1
2
3
4
5
6
7
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
Обработчик события, после полного правильного выполнения которого всё это возникает:

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
#include <QMainWindow>
#include <QDialog>
#include <QLabel>
#include "internetconnection.h"
#include <stdio.h>
#include <QFile>
#include <stdlib.h>
#include <QTextStream>
#include <registration.h>
#include <server_dialog.h>
#include <QTreeWidget>
#include <QFileDialog>
#include <QIODevice>
 
namespace Ui {
    class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    InternetConnection control;
    InternetConnection data;
    int f;
 
    FILE* fp;
 
private:
    Ui::MainWindow *ui;
 
private slots:
 
    void on_pushButton_3_clicked();
    void on_Back_Button_clicked();
    void on_Go_to_Path_clicked();
    void on_pushButton_2_clicked();
    void on_treeWidget_itemDoubleClicked(QTreeWidgetItem* item, int column);
    void on_Quit_triggered();
    void on_action_triggered();
    void on_pushButton_clicked();
};
 
#endif // MAINWINDOW_H
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
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
void MainWindow::on_pushButton_2_clicked()
{
    if(f == 0)
    {
        string server_name = ui->textEdit->toPlainText().toStdString();
        char* serv_name = const_cast<char*>(server_name.c_str());
 
        if(strlen(serv_name) <= 0)
        {
            Registration No_serv;
            No_serv.Change_Label("You didn't write server name or adress");
            No_serv.show();
            return;
        }
 
 
        string username = ui->User->toPlainText().toStdString();
        char* sUsername = const_cast<char*>(username.c_str());
 
        string password = ui->PassWord->toPlainText().toStdString();
        char* sPassword = const_cast<char*>(password.c_str());
 
        if((sUsername == NULL) || (sPassword == NULL))
        {
            Registration No_Reg;
            No_Reg.show();
            return;
        }
 
 
        control.SetParametres(serv_name,21);
 
        QLabel* connect_reflect;
 
        if(control.Connect() == -1)
        {
           Registration No_Connect;
           No_Connect.Change_Label("Unable to connect. You might wrote incorrect server name or adress");
           No_Connect.show();
           return;
        }
        else
        {
             char* hello = new char[2048];
             int k = control.RecieveMessage(hello);
             hello[k] = '\0';
 
             //dialog.Append_Dialog(hello);
             if(strstr(hello,"220") == NULL)
             {
                 QLabel* label = new QLabel("Unable to connect to server");
                 return;
             }
                hello = new char[2048];
 
             // ïîëó÷èëè èìÿ ïîëüçîâàòåëÿ è ïàðîëü
 
             int mmr = control.Log_In(sUsername,sPassword,fp);
 
             if((mmr == -101) || (mmr == -102))
                QLabel* mmrs = new QLabel("Unable to register");
 
 
             control.DataConnect(fp);
 
 
             ui->pushButton_2->setText("Disconnect");
             ui->textEdit->setEnabled(false);
             f = 1;
             ui->action->setEnabled(true);
             ui->Path->setEnabled(true);
             ui->Go_to_Path->setEnabled(true);
             ui->MainSlot->setEnabled(true);
             ui->Back_Button->setEnabled(true);
             //ui->pushButton_3->setEnabled(true);
 
             ui->Path->setText(QString::fromAscii(control.working_directory));
             char* files = new char[2048];
             int got = control.GetFileList(files); // ïîëó÷èëè ñïèñîê ôàéëîâ â êîðíåâîé äèðåêòîðèè
             int j;
             int i = 0;
             int iRowNumber = 0;
             char* cRowNumber;
 
             char* temp_file = new char[2048];
 
             while(i < got)
             {
                 j = 0;
                 temp_file = new char[2048];
                 while(files[i] != '\n')
                 {
                     temp_file[j] = files[i];
                     j++;
                     i++;
                 }
                 temp_file[j++] = '\0';
                 i++;
 
                 QString str = QString::fromAscii(temp_file);
                 QTreeWidgetItem* item = new QTreeWidgetItem;
                 //itoa(iRowNumber,cRowNumber,10);
                 sprintf(cRowNumber,"%d",iRowNumber);
                 iRowNumber++;
                 item->setText(0,QString::fromAscii(cRowNumber));
                 item->setText(1,str);
                 this->ui->treeWidget->addTopLevelItem(item);
                 this->ui->treeWidget->setEnabled(true);
 
             }
 
 
         }
 
 
    }
    else
    {
        f = 0;
        control.SendMessage("QUIT",fp);
        ui->pushButton_2->setText("Connect");
        ui->textEdit->setEnabled(true);
        ui->action->setEnabled(false);
        ui->Path->setEnabled(false);
        ui->Go_to_Path->setEnabled(false);
        ui->MainSlot->setEnabled(false);
        ui->treeWidget->clear();
        ui->treeWidget->setEnabled(false);
        ui->pushButton_3->setEnabled(false);
 
    }
}
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
12.07.2010, 14:48
удали все, и начни с начала
1
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
12.07.2010, 21:08
Mr.Dmitry, мы вообще в курсе, что если вы выделили память из глобальной кучи оператором new, то после того как этот блок не нужен ее необходимо возвращать назад менеджеру памяти оператором delete.
C++
1
2
3
4
5
6
7
8
9
10
11
             char* hello = new char[2048];
             int k = control.RecieveMessage(hello);
             hello[k] = '\0';
 
             //dialog.Append_Dialog(hello);
             if(strstr(hello,"220") == NULL)
             {
                 QLabel* label = new QLabel("Unable to connect to server");
                 return;
             }
                hello = new char[2048];
например, блок памяти в 2048 байт, на который указывал указатель hello, просто остается неиспользуемым, а в последней строке вы выделяете новый блок. Таким образом, предыдущий блок не возвращен менеджер памяти - т.е. это самая распространенная ошибка при работе с указателями в С/С++ утечка памяти (memory leak). Сколько их в вашем коде, честно говоря сбился со счета. Нужно было использовать оператор delete, либо просто чистить блок памяти функцией на вроде memset(), либо вообще ничего не выделять, т.к. увас память уже выделена. Если функция, в которой есть лик вызывается часто это может привести к довольно большим потерям памяти и даже к крашу программы.

Добавлено через 6 минут
Еще бы было бы интересно посмотреть как реализован класс InternetConnection. А в частности, как работает его функция-член int InternetConnection::GetFileList(char* files). Возможно краш случается в цикле, количество итераций которого зависит от возвращаемого значения этого метода.

PS: в код скрупулезно не вникал, т.к. нету времени. Имхо проведите полную ревизию работы с голыми указателями в Вашем приложении. А если не понимаете как с ними работать, курите документацию по умным указателям (std::auto_ptr, std::tr1::shared_ptr).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.07.2010, 21:08
Помогаю со студенческими работами здесь

в чем ошибка не понимаю
ничего не понимаю, делаю по видосам регистрацию, совсем новичек,а делать надо, уже неделю сделать не могу эту регистрацию на...

В чём ошибка - не понимаю!
В чём ошибка ? - не понимаю!: &lt;?php $str1 = &quot;wordabcdef123word&quot;; echo &quot;Исходная строка - &quot; . $str1. &quot;&lt;br&gt;&lt;br&gt;&quot;; ...

Не понимаю в чем ошибка
задача заключается в том, чтобы ввести с клавы либо считать с файла двумерный массив вещественных чисел и вывести их на экран, так же нужно...

Не понимаю в чем ошибка
В чем ошибка?Из models.py импортирую news и в переменную news указываю импорт всех обьектов.Но он говорит нет такого модуля.Более подробно...

Не понимаю в чем ошибка?
Пишу процедуру create or replace procedure Klient_inf(id int) is names Customer.NAME_ZAKAZCHIK%type; P_N...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru