R
Rus6lanҚаң. 31, 2017, 8:34 Т.Ж.

Invalid parameter passed to C runtime function. std::bad_alloc

С++, exception

Здравствуйте, у меня проблема. Уже 2 дня бьюсь. Не знаю как решить. В приложенном файле ошибки. У меня есть 2 файла, по нажатию кнопки я проверяю, какие галочки нажаты( цифры галочек добавляю в вектор), потом беру данные из файлов в зависимости от галочек( через вектор usedChannels). Где-то ошибка( Кода много, не знаю понятно ли, что вообще происходит. Это dataread.cpp

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <vector>
#include <iterator>
#include <QVector>
#include <stdio.h>
#include <typeinfo>

using namespace std;

typedef struct
{
    unsigned int    adc_channels;
    unsigned int    adc_count;
    unsigned char   adc_freq;
    unsigned short  adc_buff[100000];
}TADC_Data;


void DataRead(QVector <QVector<double>> &vector_container, QVector <int> &usedChannels)
{
    TADC_Data ADC_Data_File;
    FILE *adc_data_file;
    QVector <double> vectorOfData;
    QVector<int>::iterator itv;
    for (itv = usedChannels.begin(); itv != usedChannels.end(); itv++){
        adc_data_file = fopen(("Channel_" + to_string(*itv) + ".dat").c_str(), "rb");
        //adc_data_file = fopen("Channel_1.dat", "rb");
        if (adc_data_file == NULL) {
            cout << "Error" << endl;
        }
        else {
            cout << "Opened" << endl;
        }
        fread(&ADC_Data_File, sizeof(ADC_Data_File), 1, adc_data_file);
        fclose(adc_data_file);
        for(unsigned int j=0;j < ADC_Data_File.adc_count;j++){
            double temp;
            temp = ADC_Data_File.adc_buff[j];
            temp-= 8192;
            temp = ( (temp * 10) / 8192);
            vectorOfData.insert(vectorOfData.end(), temp);
            vector_container.append(vectorOfData);
            }
        vectorOfData.clear();
        }
}
Это MainWindow.cpp (не весь)
void MainWindow::on_showButton_clicked()
{
    check_Channels();
    DataRead(vector_container, usedChannels);
    //QVector<int>::iterator itv;
    QVector <QVector<double>>::iterator itv;
    int i = 1;
    for (itv = vector_container.begin(); itv != vector_container.end(); itv++){
         ui->customPlot->addGraph();
         ui->customPlot->graph(i)->setData(discrets_vector, *itv);
         i++;
    }
    // create graph and assign data to it:
    /*for(int i = 0; i < usedChannels.size(); i++){
        ui->customPlot->addGraph();
        //cout << discrets_vector.size();
        //cout << vector_container[i].size();
        ui->customPlot->graph(i)->setData(discrets_vector, vector_container[i]);
    }*/
    vector_container.clear();
    //ui->customPlot->addGraph();
    //ui->customPlot->graph(0)->setData(discrets_vector, vector_container.first());

    // give the axes some labels:
    // set axes ranges, so we see all data:
    QPen graphPen;
    graphPen.setColor(QColor(125,200,0));
    graphPen.setWidthF(rand()/(double)RAND_MAX*2+1);
    ui->customPlot->graph(0)->setPen(graphPen);
    ui->customPlot->replot();
}
void MainWindow::check_Channels()
{
    if (ui->checkBox_1->isChecked()){
        usedChannels.push_back(1);
    }
    if (ui->checkBox_2->isChecked()){
        usedChannels.push_back(2);
    }
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <qcustomplot.h>
#include <bitset>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_showButton_clicked();
    void mousePress();
    void mouseWheel();
    void on_actionHelp_triggered();
    void axisLabelDoubleClick(QCPAxis *axis, QCPAxis::SelectablePart part);
    void vector_initialization(uint32_t size_of_vector_discerts);
    void check_Channels();

private:
    Ui::MainWindow *ui;
    uint32_t size_of_vector_discerts = 100000;// size of vector that contains discrets
    QVector <double> data_vector;
    QVector <double> discrets_vector;
    QVector <QVector<double>> vector_container;
    QVector <int> usedChannels;
};

#endif // MAINWINDOW_H

Error.png
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

9
Evgenii Legotckoi
  • Қаң. 31, 2017, 8:54 Т.Ж.

Добрый день.
Вы не могли бы запустить программу под отладчиком (F5) и повторить всё, что сделали. У вас выбрасывается исключение где-то, а такую ошибку трудно понять просто посмотрев код. Когда сработаёт исключение, ваше приложение переключится в Qt Creator и будет показан файл и строка, в которой произошло исключение. Скорее всего будет показан файл из библиотеки, но ниже под содержимым файла будет список вызовов функций (обычно выводятся последние 20). Так вот, в этом списке верхней строкой будет файл где изначально произошло исключение, посмотрите список внимательно, там же будут и ваши файлы из вашего проекта, кликните по первой попавшейся строке, которая относится непосредственно к тем файлам, которые создали вы. И тогда вас переключит на строку, где произошло исключение.
После этого сообщите этот файл и эту строку мне. Так будет эффективнее понять, что не так. Возможно, Вы и сами сразу разберётесь, что к чему.

    R
    • Қаң. 31, 2017, 9:19 Т.Ж.

    По нажатию F5(Значок play с жуком). Происходит отладка он показывает те же ошибки, запускает приложение и оно вылетает(

      Evgenii Legotckoi
      • Қаң. 31, 2017, 10:09 Т.Ж.

      Ну что ж. Скудные данные получаются.
      А вы вообще очищаете где-нибудь usedChannels ? Я этого не заметил нигде.

      И будет ли работать, если закомментировать следующий код?

      for(unsigned int j=0;j < ADC_Data_File.adc_count;j++){
                  double temp;
                  temp = ADC_Data_File.adc_buff[j];
                  temp-= 8192;
                  temp = ( (temp * 10) / 8192);
                  vectorOfData.insert(vectorOfData.end(), temp);
                  vector_container.append(vectorOfData);
                  }
      
        R
        • Қаң. 31, 2017, 10:33 Т.Ж.

        Я закомментировал этот кусок и другой(там где цвет графика, поскольку данных нет то и цвет графика нельзя сделать) и все работает, ну то есть ничего не происходит, но ошибок вроде нет. Похоже ошибка в этом куске, но я же вроде все правильно делаю. Перепробовал push_back, append.

          R
          • Қаң. 31, 2017, 10:34 Т.Ж.

          Я не очищаю (кстати надо), но вряд ли ошибка в этом.

            Evgenii Legotckoi
            • Қаң. 31, 2017, 10:35 Т.Ж.

            Ошибка, не ошибка. надо очищать. Пару десятков итераций и приложение будет виснуть.

              Evgenii Legotckoi
              • Қаң. 31, 2017, 10:38 Т.Ж.

              push_back и append - это одно и тоже. просто push_back для совместимости с STL, но это не ваш случай.

              vectorOfData.insert(vectorOfData.end(), temp);
              

              Почему именно insert ? почему не append ?

                R
                • Қаң. 31, 2017, 10:38 Т.Ж.

                Да, я тут же исправил.

                  R
                  • Қаң. 31, 2017, 10:45 Т.Ж.
                  • Жауап шешім ретінде белгіленді.
                  vectorOfData.insert(vectorOfData.end(), temp);
                  vector_container.append(vectorOfData);
                  
                  Я идиот, мне же начало сначала заполнить вектор данных, а потом в вектор_контейнер запихнуть вектор данных. аппенд должен быть после цикла for. Спасибо вам большое) Уже мозги совсем скисли.

                    Пікірлер

                    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                    Кіріңіз немесе Тіркеліңіз
                    Г

                    C++ - Тест 001. Первая программа и типы данных

                    • Нәтиже:66ұпай,
                    • Бағалау ұпайлары-1
                    t

                    C++ - Тест 001. Первая программа и типы данных

                    • Нәтиже:33ұпай,
                    • Бағалау ұпайлары-10
                    t

                    Qt - Тест 001. Сигналы и слоты

                    • Нәтиже:52ұпай,
                    • Бағалау ұпайлары-4
                    Соңғы пікірлер
                    G
                    GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
                    Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                    d
                    dblas5Шілде 5, 2024, 11:02 Т.Ж.
                    QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                    k
                    kmssrАқп. 8, 2024, 6:43 Т.Қ.
                    Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                    АК
                    Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
                    Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                    Енді форумда талқылаңыз
                    Evgenii Legotckoi
                    Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                    добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                    F
                    FynjyШілде 22, 2024, 4:15 Т.Ж.
                    при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                    BlinCT
                    BlinCTМаусым 25, 2024, 1 Т.Ж.
                    Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                    BlinCT
                    BlinCTМамыр 5, 2024, 5:46 Т.Ж.
                    Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                    Evgenii Legotckoi
                    Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
                    Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

                    Бізді әлеуметтік желілерде бақылаңыз