hzq
2025-05-09 922a7702ea05a84cb5272fd1d5ff50e3d873cb6c
常见错误提交
2个文件已修改
2个文件已添加
82 ■■■■■ 已修改文件
Test/Test.pro 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/linestyle.cpp 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/linestyle.h 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/mainwindow.cpp 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/Test.pro
@@ -16,10 +16,14 @@
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
    errorexample.cpp \
    linestyle.cpp \
    main.cpp \
    mainwindow.cpp
HEADERS += \
    errorexample.h \
    linestyle.h \
    mainwindow.h
FORMS += \
Test/linestyle.cpp
New file
@@ -0,0 +1,6 @@
#include "linestyle.h"
linestyle::linestyle()
{
}
Test/linestyle.h
New file
@@ -0,0 +1,11 @@
#ifndef LINESTYLE_H
#define LINESTYLE_H
class linestyle
{
public:
    linestyle();
};
#endif // LINESTYLE_H
Test/mainwindow.cpp
@@ -1,15 +1,64 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    : 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 的值,条件为真
                // 执行代码块
}
MainWindow::~MainWindow()
{
    delete ui;
  // 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; }