| | |
| | | #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; } |