<返回更多

高频易错C语言易错代码案例赏析,你踩过吗?

2023-05-19    晓亮Albert
加入收藏

以下是几个高频易错C语言易错代码案例赏析。

float x = 0.1;
if (x == 0.1) {
    // 条件满足,执行操作
}

问题:浮点数比较不应使用相等运算符 ==,因为浮点数的精度有限,应该使用范围或误差判断。

pthread_mutex_t mutex1, mutex2;
pthread_mutex_init(&mutex1, NULL);
pthread_mutex_init(&mutex2, NULL);
pthread_mutex_lock(&mutex1);
pthread_mutex_lock(&mutex2);

问题:两个线程相互等待对方释放锁,导致死锁,程序无法继续执行。

int arr[5];
int *ptr = arr + 10;
*ptr = 5;

问题:指针 ptr 指向数组 arr 中超出范围的位置,导致访问无效的内存位置。

struct MyStruct {
    char a;
    int b;
};
struct MyStruct obj;
char *ptr = (char *)&obj;
int value = *(int *)(ptr + 1);

问题:结构体 MyStruct 中的成员 a 是 char 类型,大小为 1 字节,但是通过指针运算访问成员 b,可能因为内存对齐问题导致访问错误的数据。

int counter = 0;
void increment() {
    int temp = counter;
    temp++;
    counter = temp;
}

问题:多个线程同时访问和修改共享的变量 counter,导致竞态条件,结果不可预测。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>