crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Странное поведение программы, Вылетает программа
Гость_Гость_berserk_*_*
сообщение 7.7.2009, 21:52
Сообщение #1





Гости








    


Привет всем!
Пишу программу для работы с последовательным портом. в программе 3 класса. Первый работает непосредственно с портом, второй - форма, 3 ий для разбора полученной инфы.
В программе есть платформозависимый код (в классе работы с портом)

Первый прикол случился когда я в заголовочном файле объявил переменные в определённой последовательности))) притом в линуксе всё работало, а в винде на экран пёрли смайлики))). Долго ломал голову, поменял местами 2 объявления переменных и всё заработало.
так работало только в линуксе, в винде были смайлики:

private:
    bool state;
    char* buff;
    QString str;
#ifdef Q_WS_WIN
    WCHAR* port;
    DCB dcb;
    HANDLE COM;
    DWORD dwByteRead;
    COMMTIMEOUTS touts;
#endif

#ifdef Q_WS_X11
    int fd;
    struct termios options;
    QFile file;
#endif


а так работало везде
private:
#ifdef Q_WS_WIN
    WCHAR* port;
    DCB dcb;
    HANDLE COM;
    DWORD dwByteRead;
    COMMTIMEOUTS touts;
#endif

#ifdef Q_WS_X11
    int fd;
    struct termios options;
    QFile file;
#endif
    bool state;
    char* buff;
    QString str;

buff переменная в которую пихались байты с порта, а затем выводились на экран, так вот если по первому коду после объявления buff объявлял что нибудь ещё, то в винде было смайлы)))

второе.
Сегодня на работе добавил 3 класс в котором разбирается строка прочитанная с порта.

#ifndef WRITESQL_H
#define WRITESQL_H

#include <QObject>

class writesql : public QObject
{
    Q_OBJECT

public:
    writesql();

public slots:
    void get_string(QString str);
};

#endif // WRITESQL_H

#include "writesql.h"

writesql::writesql()
{

}

void writesql::get_string(QString str)
{
    int i = 0, a = 0;
    QString temp_str;
    for(i; i <= str.size(); i++)
    {
        if (str.at(i) == ' ')
        {
            temp_str = str.mid(a, i-a);
            a = i+1;
        }
    }
}

В винде всё компилируется и работает, а в линуксе программа вылетает при чтении данных с порта. При этом если 3 класс не наследует QObject или его потомков то всё работает (ну кроме сигналов и слотов которые нужны)

подозреваю что косяк с #ifdef Q_WS_WIN/#ifdef Q_WS_X11

кто что понял с моих слов помогите плиз)))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 7.7.2009, 22:02
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Гость_Гость_berserk_*_* @ 8.7.2009, 1:52) *
for(i; i <= str.size(); i++)
Цитата(Гость_Гость_berserk_*_* @ 8.7.2009, 1:52) *
if (str.at(i) == ' ')
ты вылазишь на одну позицию за перделы строки
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.12.2024, 22:06