Seite 1 von 1

Programmabsturz beim kopieren aus Qtextedit

Verfasst: 15. November 2011 19:15
von JohnBergago
Hi,
Ich bin neu im Forum und habe ein Problem mit einer kleinen Anwendung.
Die Anwendung besitzt 2 Textfelder im ersten Textfeld wird text eingegeben und im 2. wir der text verändert ausgegeben.
Wenn ich versuche etwas aus einem Textfeld zu kopieren stürzt das programm ab und Windows XP meldet Project.exe hat ein Problem festgestellt und muss beendet werden.
Der Debugger sagt dazu: Fehler beim disassemblieren: cannot access memory at adress =x...

Hoffe ihr könnt mir elfen google konnte es bis jetzt noch nich.
hier der Code

main

Code: Alles auswählen

#include <QtGui>
#include "codierer.h"

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

    Codierer w;
    w.show();

    return a.exec();
}
codierer.cpp

Code: Alles auswählen

#include "codierer.h"
#include <iostream>
#include <sstream>


char pcBuff[3000];														// Array in dem die ausgelesenen Zeichen gespeichert werden
char useArray[3000];													// Array mit dem gearbeitet wird um den Text auszugegben
unsigned int length;													// Variable in der die Länge einer Zeile (Anzahl zeichen) gespeichet wird
int i = 0; 																// Hilfsvariable zugewiesener Wert = 0
int b = 0;																// Hilfsvariable zugewieseer Wert = 0
int c;

char zeichena[] = {... }; // hier könnt ihr selbst was reinschreiben wenn ihr das programm probieren wollt


Codierer::Codierer(QWidget *parent)
    : QWidget(parent)
{
    ui->setupUi(this);

    QObject::connect(ui->OkButton,SIGNAL(clicked()),  this, SLOT(OkButtonPressed()));

}

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


void Codierer::OkButtonPressed()
{

    QString zahl;
    if(ui->CodierenAuswahl->isChecked())
    {
       QString text;

       text = ui->Eingabe->toPlainText();	// lese pro zeile max 3000 zeichen aus und speichere in pcBuff[]

       if(text.size()>0)
       {
           for(int z = 0; z<= text.size();z++)
           {
               useArray[z]= text[z].toAscii();

           }
     }
   //Verschlüsseln
       ui->Ausgabe->setPlainText("");
       for(int j = 0; j <= text.size(); j++)									// solange j <= length werden die nachfolgenden Schritte erfolgen wobei j
    {
         i = 0;																// pro Durchgang um 1 erhöht wird
         while(i <= 255)
         {
             if(zeichena[i] == useArray[j])
             {
                 zahl = zahl.setNum(i);
                 ui->Ausgabe->insertPlainText(zahl);
                 ui->Ausgabe->insertPlainText(" ");
                break;
             }
             i++;
         }
    }

}
}

meine klasse

Code: Alles auswählen

#ifndef CODIERER_H
#define CODIERER_H

#include <QObject>
#include "ui_codierer.h"

class Codierer : public QWidget
{
        Q_OBJECT //

public:
       Codierer(QWidget *parent = 0);
       virtual ~Codierer();


public slots:
        void OkButtonPressed();
private:
        Ui::Codierprogramm *ui;
};

#endif //CODIERER_H
die vom qt designer erstellte klasse

Code: Alles auswählen

#ifndef UI_CODIERER_H
#define UI_CODIERER_H

#include <QtCore>
#include <QtGui>
/********************************************************************************
** Form generated from reading UI file 'mainbO2104.ui'
**
** Created: Mon 31. Oct 19:50:44 2011
**      by: Qt User Interface Compiler version 4.7.4
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QFrame>
#include <QtGui/QGridLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QRadioButton>
#include <QtGui/QSpacerItem>
#include <QtGui/QTextEdit>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Codierprogramm
{
public:
    QGridLayout *gridLayout_5;
    QSpacerItem *horizontalSpacer_13;
    QFrame *frame;
    QGridLayout *gridLayout;
    QSpacerItem *horizontalSpacer_2;
    QRadioButton *CodierenAuswahl;
    QRadioButton *DecodierenAuswahl;
    QSpacerItem *horizontalSpacer_3;
    QSpacerItem *horizontalSpacer;
    QSpacerItem *horizontalSpacer_11;
    QSpacerItem *verticalSpacer_2;
    QSpacerItem *horizontalSpacer_10;
    QFrame *frame_2;
    QGridLayout *gridLayout_3;
    QLabel *label;
    QSpacerItem *horizontalSpacer_5;
    QTextEdit *Eingabe;
    QSpacerItem *horizontalSpacer_4;
    QSpacerItem *horizontalSpacer_8;
    QSpacerItem *verticalSpacer;
    QSpacerItem *horizontalSpacer_14;
    QFrame *frame_3;
    QGridLayout *gridLayout_4;
    QLabel *label_3;
    QSpacerItem *horizontalSpacer_7;
    QSpacerItem *horizontalSpacer_6;
    QTextEdit *Ausgabe;
    QSpacerItem *horizontalSpacer_9;
    QSpacerItem *horizontalSpacer_15;
    QSpacerItem *verticalSpacer_3;
    QSpacerItem *horizontalSpacer_12;
    QPushButton *OkButton;

    void setupUi(QWidget *Codierprogramm)
    {
        if (Codierprogramm->objectName().isEmpty())
            Codierprogramm->setObjectName(QString::fromUtf8("Codierprogramm"));
        Codierprogramm->resize(485, 588);

        Codierprogramm->setStyleSheet(QString::fromUtf8("#Main{\n"
"background:white;\n"
"}\n"
"#frame{\n"
"border: 3px solid gray;\n"
"border-radius: 40px;\n"
"background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #eef, stop: 1 #ccf);\n"
"}\n"
"#frame_2{\n"
"border: 3px solid gray;\n"
"border-radius: 40px;\n"
"background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #eef, stop: 1 #ccf);\n"
"}\n"
"#frame_3{\n"
"border: 3px solid gray;\n"
"border-radius: 40px;\n"
"background: QLinearGradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #eef, stop: 1 #ccf);\n"
"}"));
        gridLayout_5 = new QGridLayout(Codierprogramm);

       gridLayout_5->setObjectName(QString::fromUtf8("gridLayout_5"));
        horizontalSpacer_13 = new QSpacerItem(31, 44, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_5->addItem(horizontalSpacer_13, 0, 0, 1, 1);

        frame = new QFrame(Codierprogramm);
        frame->setObjectName(QString::fromUtf8("frame"));
        frame->setFrameShape(QFrame::StyledPanel);
        frame->setFrameShadow(QFrame::Raised);
        gridLayout = new QGridLayout(frame);
        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
        horizontalSpacer_2 = new QSpacerItem(15, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout->addItem(horizontalSpacer_2, 0, 0, 1, 1);

        CodierenAuswahl = new QRadioButton(frame);
        CodierenAuswahl->setObjectName(QString::fromUtf8("CodierenAuswahl"));
        CodierenAuswahl->setStyleSheet(QString::fromUtf8("font: 75 11pt \"MS Shell Dlg 2\";"));

        gridLayout->addWidget(CodierenAuswahl, 0, 1, 1, 1);

        DecodierenAuswahl = new QRadioButton(frame);
        DecodierenAuswahl->setObjectName(QString::fromUtf8("DecodierenAuswahl"));
        DecodierenAuswahl->setStyleSheet(QString::fromUtf8("font: 75 11pt \"MS Shell Dlg 2\";"));

        gridLayout->addWidget(DecodierenAuswahl, 0, 3, 1, 1);

        horizontalSpacer_3 = new QSpacerItem(14, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout->addItem(horizontalSpacer_3, 0, 4, 1, 1);

        horizontalSpacer = new QSpacerItem(128, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout->addItem(horizontalSpacer, 0, 2, 1, 1);


        gridLayout_5->addWidget(frame, 0, 1, 1, 5);

        horizontalSpacer_11 = new QSpacerItem(41, 44, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_5->addItem(horizontalSpacer_11, 0, 6, 1, 1);

        verticalSpacer_2 = new QSpacerItem(66, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);

        gridLayout_5->addItem(verticalSpacer_2, 1, 2, 1, 1);

        horizontalSpacer_10 = new QSpacerItem(31, 237, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_5->addItem(horizontalSpacer_10, 2, 0, 1, 1);

        frame_2 = new QFrame(Codierprogramm);
        frame_2->setObjectName(QString::fromUtf8("frame_2"));
        frame_2->setFrameShape(QFrame::StyledPanel);
        frame_2->setFrameShadow(QFrame::Raised);
        gridLayout_3 = new QGridLayout(frame_2);
        gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
        label = new QLabel(frame_2);
        label->setObjectName(QString::fromUtf8("label"));
        label->setStyleSheet(QString::fromUtf8("font: 75 11pt \"MS Shell Dlg 2\";"));

        gridLayout_3->addWidget(label, 0, 1, 1, 1);

        horizontalSpacer_5 = new QSpacerItem(35, 189, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_3->addItem(horizontalSpacer_5, 1, 0, 1, 1);

        Eingabe = new QTextEdit(frame_2);
        Eingabe->setObjectName(QString::fromUtf8("Eingabe"));

        gridLayout_3->addWidget(Eingabe, 1, 1, 1, 1);

        horizontalSpacer_4 = new QSpacerItem(35, 189, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_3->addItem(horizontalSpacer_4, 1, 2, 1, 1);


        gridLayout_5->addWidget(frame_2, 2, 1, 1, 5);

        horizontalSpacer_8 = new QSpacerItem(41, 237, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_5->addItem(horizontalSpacer_8, 2, 6, 1, 1);

        verticalSpacer = new QSpacerItem(66, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);

        gridLayout_5->addItem(verticalSpacer, 3, 2, 1, 1);

        horizontalSpacer_14 = new QSpacerItem(31, 219, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_5->addItem(horizontalSpacer_14, 4, 0, 1, 1);

        frame_3 = new QFrame(Codierprogramm);
        frame_3->setObjectName(QString::fromUtf8("frame_3"));
        frame_3->setFrameShape(QFrame::StyledPanel);
        frame_3->setFrameShadow(QFrame::Raised);
        gridLayout_4 = new QGridLayout(frame_3);
        gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
        label_3 = new QLabel(frame_3);
        label_3->setObjectName(QString::fromUtf8("label_3"));
        label_3->setStyleSheet(QString::fromUtf8("font: 75 11pt \"MS Shell Dlg 2\";"));

        gridLayout_4->addWidget(label_3, 0, 1, 1, 1);

        horizontalSpacer_7 = new QSpacerItem(44, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_4->addItem(horizontalSpacer_7, 1, 0, 1, 1);

        horizontalSpacer_6 = new QSpacerItem(44, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_4->addItem(horizontalSpacer_6, 1, 2, 1, 1);

        Ausgabe = new QTextEdit(frame_3);
        Ausgabe->setObjectName(QString::fromUtf8("Ausgabe"));

        gridLayout_4->addWidget(Ausgabe, 1, 1, 1, 1);


        gridLayout_5->addWidget(frame_3, 4, 1, 1, 5);

        horizontalSpacer_9 = new QSpacerItem(41, 219, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_5->addItem(horizontalSpacer_9, 4, 6, 1, 1);

        horizontalSpacer_15 = new QSpacerItem(107, 21, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_5->addItem(horizontalSpacer_15, 5, 0, 1, 2);

        verticalSpacer_3 = new QSpacerItem(66, 21, QSizePolicy::Minimum, QSizePolicy::Expanding);

        gridLayout_5->addItem(verticalSpacer_3, 5, 2, 1, 1);

        horizontalSpacer_12 = new QSpacerItem(117, 21, QSizePolicy::Expanding, QSizePolicy::Minimum);

        gridLayout_5->addItem(horizontalSpacer_12, 5, 5, 1, 2);

        OkButton = new QPushButton(Codierprogramm);
        OkButton->setObjectName(QString::fromUtf8("OkButton"));
        OkButton->setStyleSheet(QString::fromUtf8("background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, stop:0 rgba(46,207,255, 255), stop:1 rgba(0, 85, 255, 255));\n"
"font: 11 pt \"Roland\";\n"
"\n"
"color:rgb(255, 255, 127);\n"
"\n"
"border-width: 3px; \n"
"	border-color: rgb(0, 0, 255);\n"
"border-style :solid;\n"
"border-radius: 7 ;\n"
"padding: 3px;"));

        gridLayout_5->addWidget(OkButton, 5, 3, 1, 1);


        retranslateUi(Codierprogramm);

        QMetaObject::connectSlotsByName(Codierprogramm);
    } // setupUi

    void retranslateUi(QWidget *Codierprogramm)
    {
        Codierprogramm->setWindowTitle(QApplication::translate("Codierprogramm", "Form", 0, QApplication::UnicodeUTF8));
        CodierenAuswahl->setText(QApplication::translate("Codierprogramm", "Codieren", 0, QApplication::UnicodeUTF8));
        DecodierenAuswahl->setText(QApplication::translate("Codierprogramm", "Decodieren", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("Codierprogramm", "Zu codierender bzw. decodierender Text:", 0, QApplication::UnicodeUTF8));
        label_3->setText(QApplication::translate("Codierprogramm", "Ausgabe:", 0, QApplication::UnicodeUTF8));
        OkButton->setText(QApplication::translate("Codierprogramm", "OK", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class Codierprogramm: public Ui_Codierprogramm {};
} // namespace Ui

QT_END_NAMESPACE

#endif
Bin Qt anfänger und komm einfach nicht drauf wo das problem ist. Ich hoffe ihr könnt helfen
John

Re: Programmabsturz beim kopieren aus Qtextedit

Verfasst: 15. November 2011 19:34
von Christian81
Man nehme einen Debugger und schaue wo genau er abstürzt. Abgesehen davon würde ich weder globale Arrays benutzen noch Arrays mit fester Länge ohne Überprüfung wie viel Daten reingeschrieben werden. Des weiteren bringt toAscii() nur Ascii-Zeichen zurück - was also wenn non-Ascii zeichen im Text stehen etc?

Re: Programmabsturz beim kopieren aus Qtextedit

Verfasst: 15. November 2011 21:33
von solarix
Ausserdem zeigt "Codierer::ui" ins Nirvana.. purer Zufall also, dass sich das Programm nicht sofort verabschiedet.

Re: Programmabsturz beim kopieren aus Qtextedit

Verfasst: 16. November 2011 15:35
von JohnBergago
Danke solarix daran lags vielen vielen Dank. Ich bin so froh :D
Und Danke Christian81 für die Tipps.
MfG John