hzq
2025-05-09 c0917a009b2eb7b4bbb70e4ae0ea4ccac6318a29
常见错误提交
1个文件已修改
51 ■■■■■ 已修改文件
Test/mainwindow.cpp 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/mainwindow.cpp
@@ -6,6 +6,57 @@
    , 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
    /**********其他错误**********/
    //未使用的变量
    int unused = 0;
}
MainWindow::~MainWindow()