From d5fad640fb749ab6626cbf68ba2b7cdc1fd058f7 Mon Sep 17 00:00:00 2001 From: zxin <ninthozward1@outlook.com> Date: 星期三, 14 五月 2025 11:27:36 +0800 Subject: [PATCH] 提交 --- Test/errorexample.cpp | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Test/errorexample.h | 13 ++++++ 2 files changed, 118 insertions(+), 0 deletions(-) diff --git a/Test/errorexample.cpp b/Test/errorexample.cpp new file mode 100644 index 0000000..e3c828a --- /dev/null +++ b/Test/errorexample.cpp @@ -0,0 +1,105 @@ +#include "errorexample.h" + +#include <QLabel> +errorexample::errorexample() { + // 1.未包含必要的头文件 + // 错误:缺少 #include <QLabel> + QLabel label("Hello"); // 编译错误:'QLabel' was not declared in this scope + label.show(); + + // 2.未初始化指针 + QLabel *label4; + label4->setText("Hello"); // 错误:使用未初始化的指针 + + // 修复:初始化指针 + QLabel *label5 = new QLabel; + + // 3.父对象管理不当导致内存泄露 + QLabel *label1 = new QLabel("Memory Leak"); + label1->show(); + + // 正确做法:设置父对象,Qt会自动管理内存 + QWidget *parent = new QWidget; + QLabel *managedLabel = new QLabel("Managed", parent); + + // 4.使用已删除的对象 + QLabel *label2 = new QLabel("Delete Me"); + delete label2; + + // 错误:访问已删除的对象 + label2->setText("Oops"); // 未定义行为 + + // 5.字符串编码问题 + QLabel *label3 = new QLabel; + // 错误:硬编码非ASCII字符串 + label3->setText("中文文本"); // 可能显示乱码,取决于源文件编码 + + // 正确做法:使用tr()进行翻译 + label3->setText(tr("中文文本")); + + // 6.容器越界访问 + QList<int> list = {1, 2, 3}; + + // 错误:越界访问 + int value = list[3]; // 索引最大为2 + + // 正确做法:使用at()并检查边界 + if (list.size() > 3) { + int safeValue = list.at(3); // at()会在越界时抛出异常 + } + + // 7.缺失终止条件的For循环 + for (int i = 0;; i++) { // 错误:无终止条件 + //循环体 + } + + // 正确写法: + for (int i = 0; i < 10; i++) { // 添加终止条件 + //循环体 + } + + // 8.误用 = 代替 == + if (x = 5) { // 误将赋值操作当作比较,条件始终为 true(除非 x 是布尔类型) + // ... + } + + // 9.事件处理未调用基类实现 + void CustomWidget::paintEvent(QPaintEvent * event) { + // 错误:未调用基类实现 + QPainter painter(this); + // 缺少:QWidget::paintEvent(event); + } + + // 10.信号槽参数不匹配 + // 错误:信号参数与槽参数类型不匹配 + connect(sender, &Sender::valueChanged(int), receiver, + &Receiver::updateValue(QString)); + + // 修复:确保参数类型一致 + connect(sender, &Sender::valueChanged(int), receiver, + &Receiver::updateValue(int)); + + // 11.未实现纯虚函数 + class MyInterface { + public: + virtual void pureVirtual() = 0; + }; + + class MyClass : public MyInterface { + // 错误:未实现纯虚函数 + }; + + // 修复:实现纯虚函数 + void MyClass::pureVirtual() { /* 实现 */ + } + + // 12.未正确实现拷贝构造函数 + class MyClass1 { + public: + QWidget *widget; + MyClass1(const MyClass1 &other) { widget = other.widget; } // 错误:浅拷贝 + }; + + // 修复:深拷贝或禁用拷贝构造函数 + MyClass1(const MyClass1 &other) = delete; +} diff --git a/Test/errorexample.h b/Test/errorexample.h new file mode 100644 index 0000000..3a439c6 --- /dev/null +++ b/Test/errorexample.h @@ -0,0 +1,13 @@ +#ifndef ERROREXAMPLE_H +#define ERROREXAMPLE_H + +#include <QObject> + +class errorexample +{ + Q_OBJECT +public: + errorexample(); +}; + +#endif // ERROREXAMPLE_H -- Gitblit v1.9.1