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. Спасибо вам большое) Уже мозги совсем скисли.

                    Пікірлер

                    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                    Кіріңіз немесе Тіркеліңіз
                    OI
                    • Ora Iro
                    • Жел. 24, 2024, 6:38 Т.Ж.

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

                    • Нәтиже:40ұпай,
                    • Бағалау ұпайлары-8
                    AD

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Нәтиже:50ұпай,
                    • Бағалау ұпайлары-4
                    m
                    • molni99
                    • Қаз. 26, 2024, 1:37 Т.Ж.

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Нәтиже:80ұпай,
                    • Бағалау ұпайлары4
                    Соңғы пікірлер
                    ИМ
                    Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
                    Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
                    Evgenii Legotckoi
                    Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
                    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
                    A
                    ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
                    Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
                    ИМ
                    Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
                    Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
                    d
                    dblas5Шілде 5, 2024, 11:02 Т.Ж.
                    QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                    Енді форумда талқылаңыз
                    Evgenii Legotckoi
                    Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                    добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                    t
                    tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
                    google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                    NSProject
                    NSProjectМаусым 4, 2022, 3:49 Т.Ж.
                    Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
                    9
                    9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
                    Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

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