Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Invalid parameter passed to C runtime function.

Invalid parameter passed to C runtime function.

Scheduled Pinned Locked Moved General and Desktop
8 Posts 3 Posters 33.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • T Offline
    T Offline
    torsten
    wrote on last edited by
    #1

    I have a problem with a application. I've created a debug handler with a own debug window. On a system without Qt, only the needed files, the windows works as expected, but if i work on a system installed with qt, the application crashs with the output "Invalid parameter passed to C runtime function." and with an error box from Microsoft Visual C++ Runtime Library.

    I'm not sure what the problem is. The debugwindowdemo is a simple ui class with some debug output. The other files i have posted here.

    main.cpp
    @#include "debugwindowdemo.h"
    #include "debughandler.h"
    #include <QtGui/QApplication>
    #include <QWidget>
    #include <QtGlobal>
    #include <QTextBrowser>

    int main( int argc, char* argv[] ) {
    QApplication app( argc, argv );

    qInstallMsgHandler(debugWinMsgHandler);
    
    DebugWindowDemo *dialog = new DebugWindowDemo;
    dialog->show();
    
    return app.exec();
    

    }
    @

    debughandler.h
    @#ifndef DEBUGHANDLER_H
    #define DEBUGHANDLER_H

    #include "debugwindow.h"

    void debugWinMsgHandler (QtMsgType type, const char* msg) {
    static DebugWindow* debugWindow = new DebugWindow;
    debugWindow->move(0,0);
    debugWindow->show();
    switch(type) {
    case QtDebugMsg:
    debugWindow->append(QString(QObject::tr("D: %1")).arg(msg));
    break;
    case QtWarningMsg:
    debugWindow->append(QString(QObject::tr("W: %1")).arg(msg));
    break;
    case QtCriticalMsg:
    debugWindow->append(QString(QObject::tr("C: %1")).arg(msg));
    break;
    case QtFatalMsg:
    debugWindow->append(QString(QObject::tr("F: %1")).arg(msg));
    break;
    }
    }
    #endif
    @

    debugwindow.h
    @#ifndef DEBUGWINDOW_H
    #define DEBUGWINDOW_H

    #include <QDialog>

    namespace Ui {
    class DebugWindow;
    }

    class DebugWindow : public QDialog
    {
    Q_OBJECT

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

    public slots:
    void append(QString);

    private:
    Ui::DebugWindow *ui;

    private slots:
    void search(QString);
    void print();
    void save();

    };

    #endif // DEBUGWINDOW_H
    @

    debugwindow.cpp
    @#include "debugwindow.h"
    #include "ui_debugwindow.h"

    #include <QMessageBox>
    #include <QFileDialog>
    #include <QTextStream>
    #include <QPrintDialog>
    #include <QPrinter>
    #include <QFont>

    DebugWindow::DebugWindow(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DebugWindow)
    {
    QFont newFont("Ubuntu", 8);
    this->setFont(newFont);
    ui->setupUi(this);
    ui->tbClear->setVisible(false);
    connect(ui->leSearch,SIGNAL(textChanged(QString)),this,SLOT(search(QString)));
    connect(ui->tbClear,SIGNAL(clicked()),ui->leSearch,SLOT(clear()));
    connect(ui->pbPrint,SIGNAL(clicked()),this,SLOT(print()));
    connect(ui->pbSave,SIGNAL(clicked()),this,SLOT(save()));
    connect(ui->pbClose,SIGNAL(clicked()),this,SLOT(close()));
    }

    DebugWindow::~DebugWindow()
    {
    delete ui;
    }

    void DebugWindow::append(QString str)
    {
    ui->teLog->append(str);
    }

    void DebugWindow::search(QString pattern)
    {
    ui->tbClear->setVisible(!pattern.isEmpty());
    QTextDocument* document = ui->teLog->document();

    QTextCharFormat noBackground;
    noBackground.clearBackground();
    QTextCharFormat highlight;
    highlight.setBackground (QBrush(QColor(239,41,41,200)));
    
    QTextCursor allText  = QTextCursor(document);
    allText.select(QTextCursor::Document);
    allText.setCharFormat(noBackground);
    
    QRegExp expression = QRegExp(pattern,Qt::CaseInsensitive,QRegExp::RegExp2);
    
    QTextCursor cursor = document->find(expression,QTextCursor(document),0);
    while (!cursor.isNull()) {
        cursor.select(QTextCursor::LineUnderCursor);
        cursor.setCharFormat(highlight);
        cursor = document->find(expression,cursor,0);
    }
    

    }

    void DebugWindow::save()
    {
    QString fileName = QFileDialog::getSaveFileName(this,QObject::tr("Logfile speichern"),QDir::homePath(),QObject::tr("Logfile (*.log)"));
    if (!fileName.isEmpty())
    {
    if (!fileName.endsWith("log"))
    {
    fileName = fileName+".log";
    }
    QFile file(fileName);
    if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
    QString message = QString("%1%2%3")
    .arg(QObject::tr("Die Datei "))
    .arg(fileName)
    .arg(QObject::tr(" kann nicht gespeichert werden!"));
    QMessageBox::critical(this,QObject::tr("Fehler beim Speichenrn der Logfile."),message);
    }
    else
    {
    QTextStream out(&file);
    out.setGenerateByteOrderMark(true);
    out << ui->teLog->toPlainText();
    file.close();
    QString message = QString("%1%2%3")
    .arg(QObject::tr("Die Logfile "))
    .arg(fileName)
    .arg(QObject::tr(" wurde erfolgreich gespeichert!"));
    QMessageBox::information(this,QObject::tr("Logfile erfolgreich gespeichert!"),message);
    }
    }
    }

    void DebugWindow::print()
    {
    QTextDocument *document = ui->teLog->document();
    QPrinter printer;
    QPrintDialog printDialog(&printer);
    if (printDialog.exec() != QDialog::Accepted)
    {
    return;
    }
    document->print(&printer);
    }
    @

    1 Reply Last reply
    0
    • G Offline
      G Offline
      giesbert
      wrote on last edited by
      #2

      What do you mean by "work on a system installed with qt"?
      Which compilers do you use?
      With which compiler was the installed Qt version build?

      Nokia Certified Qt Specialist.
      Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

      1 Reply Last reply
      0
      • T Offline
        T Offline
        torsten
        wrote on last edited by
        #3

        “work on a system installed with qt” means a installed qt sdk (including qt path in the $PATH)
        I'm using the build 2010.05 mingw

        1 Reply Last reply
        0
        • G Offline
          G Offline
          giesbert
          wrote on last edited by
          #4

          so, you are using build 2010.05 with mingw. And which version is installed on the machine, where it crashes? Are those versions the same? The error sounds (for a first read) to be caused by different versions or different builds (with different parameters, compilers etc). That's why I'm asking...

          Nokia Certified Qt Specialist.
          Programming Is Like Sex: One mistake and you have to support it for the rest of your life. (Michael Sinz)

          1 Reply Last reply
          0
          • T Offline
            T Offline
            torsten
            wrote on last edited by
            #5

            The same version is installed on the system where it crash. the "funny" part is, on a system without qt sdk, only with the needed qt files (libgcc_s_dw2-1.dll, mingwm10.dll, QtCored4.dll, QtGuid4.dll) it works.

            Last night i found out (lot of things i've tried eg switching debugwindow from qdialog to qwidget), that it has to be a problem of the ui file (i think so)... i created a new designer class, copied!!! the code into the cpp/h files and "copied" the ui elements with the designer to the other ui file... and you wouldn't believe it, it works.. i will post the original ui file... i haven't found any errors within, but maybe there is another problem:

            debugwindow.ui
            http://pastebin.com/XpiyNF3K

            1 Reply Last reply
            0
            • T Offline
              T Offline
              torsten
              wrote on last edited by
              #6

              It seems to be an ansi/utf8 conversion error if the ui file is ansi encoded. i converted ui file to utf8. ive'd used the rc version of the qtcreater who was warning of wrong encoded file (so i figured it out).

              1 Reply Last reply
              0
              • S Offline
                S Offline
                snowpong
                wrote on last edited by
                #7

                Thanks for the hint here Torsten - I had a similar problem here. The only difference was a .qml file was saved with whatever System encoding Mac runs, and on my Win7 I got the same "Invalid parameter passed to C runtime function.” error.

                The fix was to "Save with Encoding" UTF-8 and rebuild - then it worked without errors? Did you file a bug-report?

                _Update: _ Actually turned out to be another bug (exception thrown and the program didn't know what to do) :) Nevermind, nothing to see here :D

                1 Reply Last reply
                0
                • T Offline
                  T Offline
                  torsten
                  wrote on last edited by
                  #8

                  No, i didn't file a bug, because it's not a "bug" after all. Maybe they should add a feature to configure the basic encoding the creator should use. (I know, you can choose the encoding, but that doesn't change the creator defaults).

                  1 Reply Last reply
                  0

                  • Login

                  • Login or register to search.
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups
                  • Search
                  • Get Qt Extensions
                  • Unsolved