From 922a7702ea05a84cb5272fd1d5ff50e3d873cb6c Mon Sep 17 00:00:00 2001 From: hzq <hzq123456> Date: 星期三, 14 五月 2025 11:18:45 +0800 Subject: [PATCH] 常见错误提交 --- Test/mainwindow.cpp | 69 +++++++++++++++++++++++++++++----- 1 files changed, 59 insertions(+), 10 deletions(-) diff --git a/Test/mainwindow.cpp b/Test/mainwindow.cpp index 41a26bd..2364edf 100644 --- a/Test/mainwindow.cpp +++ b/Test/mainwindow.cpp @@ -1,15 +1,64 @@ #include "mainwindow.h" + #include "ui_mainwindow.h" -MainWindow::MainWindow(QWidget *parent) - : QMainWindow(parent) - , ui(new Ui::MainWindow) -{ - ui->setupUi(this); +MainWindow::MainWindow(QWidget* parent) + : QMainWindow(parent), ui(new Ui::MainWindow) { + ui->setupUi(this); + + /**********类型转换错误**********/ + // 1.隐式类型转换导致的精度损失 + double numDouble = 3.1415926; + int numInt = numDouble; // 隐式转换,精度损失,没有进行显式 static_cast + // int numInt = static_cast<int>(numDouble); // 显式转换,明确表示接受精度损失 + // int numInt = (int)numDouble; + + // 2.强制类型转换错误 + void* void_ptr = nullptr; + int* int_ptr = static_cast<int*>( + void_ptr); // 强制转换错误,void 指针不能直接转为有符号类型指针 + + // 3.转换类型后最好判断一下是否转换成功,指针是否为空 + + /**********逻辑错误**********/ + // 1.循环无退出条件(死循环) + for (int i = 0;; i++) { + // 循环体 + } + // 2.数组越界 + int array[10]; + array[10] = 0; // 越界访问容器元素 + std::vector<int> vec(5); + vec[10] = 0; // 越界访问容器元素 + + // 3.条件判断中的逻辑运算符误用(= 代替 ==) + int a = 5, b = 10; + if (a = b) { // 误用 = 代替 ==,此处逻辑短路,a 被赋值为 b 的值,条件为真 + // 执行代码块 + } + + // 4.未初始化变量的使用 + int uninitialized; + if (uninitialized > 0) { // 使用未初始化变量,可能导致未定义行为 + // 执行代码块 + } + + /**********内存管理错误**********/ + // 1.引用空指针 + int* ptr = new int[5]; + delete[] ptr; + ptr[0] = 10; // 指针已悬空,仍尝试访问 + + // 2.内存泄露 + int* pt = new int[10]; + // 没有 delete[] pt + + /**********其他错误**********/ + // 1.未使用的变量 + int unused = 0; + + // 2.未包含必要的头文件 + //#include<> } -MainWindow::~MainWindow() -{ - delete ui; -} - +MainWindow::~MainWindow() { delete ui; } -- Gitblit v1.9.1