所以我写了一个 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:
};