C++编程中的常见陷阱:你踩过几个?
发表时间: 2023-08-28 09:39
#include <iostream>int main() { while (true) { int* num = new int; } return 0;}
这段代码会不断分配内存,但从不释放。为避免内存泄漏,应该在不需要使用动态分配的内存时,使用delete释放它。
#include <iostream>int main() { int* num; *num = 10; std::cout << *num << std::endl; return 0;}
在这个例子中,num是一个未初始化的指针,尝试对其进行解引用会导致未定义的行为。应该始终将指针初始化为一个有效的地址,或者使用动态分配的内存。
#include <iostream>int main() { int arr[5] = {1, 2, 3, 4, 5}; std::cout << arr[5] << std::endl; return 0;}
在这里,数组下标越界会访问到无效的内存位置,导致未定义的行为。要确保数组下标始终在有效范围内。
#include <iostream>int main() { int* num = nullptr; std::cout << *num << std::endl; return 0;}
解引用空指针会导致未定义的行为。在使用指针之前,始终要检查其是否为非空。
#include <iostream>int main() { double a = 0.1 + 0.2; double b = 0.3; if (a == b) { std::cout << "Equal" << std::endl; } else { std::cout << "Not Equal" << std::endl; } return 0;}
由于浮点数的精度问题,直接比较它们是否相等可能会导致意外的结果。应该使用一个很小的误差范围来进行比较。
#include <iostream>#include <cstring>int main() { char str1[] = "Hello"; char str2[] = "World"; char result[10]; strcpy(result, str1); strcat(result, str2); std::cout << result << std::endl; return 0;}
上述代码使用了C风格的字符串处理函数,如果操作的字符串长度超过了目标数组的容量,会导致缓冲区溢出。应该使用std::string来更安全地进行字符串操作。
这些只是C++中可能遇到的一些典型陷阱。你在日常工作中遇到过以上坑吗?如果你遇到过其他坑,请在评论区留言,以便他人避坑。