0

所以我写了一个 MainWindow 来启动一些东西,其中一个是处理另一个线程中的连接的服务器。它基本上是基于 TCP 的点对点即时消息客户端。我还没有真正能够测试它是否正常工作,因为在将文本附加到数据项的 QLinkedList 时出现内存访问冲突。底层线程可以访问此列表,并在计时器上扫描列表以查找仍需要通过该套接字发送的数据。在主窗口中,当用户单击按钮时,框中的文本应附加到要由套接字发送的数据列表中。但是,每次我尝试附加某些内容时,都会出现内存访问冲突错误。我一直在尝试使用 Visual Studio 调试它几个小时,现在我正在寻找新的眼睛。

这是我的 MainWindow 类实现:

MainWindow::MainWindow(QWidget *parent)
   : QMainWindow(parent),
   , ui(new Ui::MainWindow)
{
    timer = new QTimer;
    sysFrame = new int;
    data = new QLinkedList<Data>;
    timer->start(500);
    connect(timer,SIGNAL(timeout(QPrivateSignal)),this,SLOT(handleTime()));
    *sysFrame =0;
    addr = new QString;
    msgs = new QString;
    lock = new QMutex;
    name = new QString;
    startDialog start(name,addr);
    start.setModal(true);
    start.exec();
    Server serv(sysFrame,data,lock,*addr,msgs);
    serv.StartServer();
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete sysFrame;
    delete timer;
    delete addr;
    delete data;
    delete msgs;
    delete lock;
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
    Data tempData;
    QString tempString;
    tempString.clear();
    tempString.append("<").append(name).append(">: ");
    tempString.append(ui->lineEdit->text());
    ui->lineEdit->clear();
    lock->lock();
    tempData.frame=*sysFrame;
    tempData.text=tempString;
    data->append(tempData); //Memory access violation here.
    msgs->append(tempString);
    msgs->append("\n");
    lock->unlock();
}

void MainWindow::handleTime()
{
    ui->textBrowser->clear();
    ui->textBrowser->setText(*msgs);
    ui->textBrowser->repaint();
}

内存问题已被注释,并且在“on_pushButton_clicked”方法中。

我真的很想弄清楚这个错误,以便我可以继续调试我的代码。

谢谢。

数据类:

#include <QObject>

class Data : public QObject
{
Q_OBJECT

public:
Data(QObject *parent=0);
~Data();
QString text;
int frame;

private:

};
4

0 回答 0