2025-09-02 C++野指针:产生原因与防范措施 C++野指针:产生原因与防范措施 什么是野指针?野指针,又称悬垂指针(Dangling Pointer),是指指针变量指向的内存已经被释放或失效,但指针本身未被置空,仍然保留原地址值。访问野指针可能导致不可预测的行为,如程序崩溃、数据篡改或安全漏洞。野指针的产生原因 指针未初始化指针声明后未赋初值,其值是随机的,可能指向任意内存地址。cpp int *ptr; // 未初始化,随机指向内存 *ptr = 10; // 危险操作 指针指向已释放的内存动态分配的内存被释放后,指针未置空,仍然指向原地址。cpp int *ptr = new int(10); delete ptr; // ptr 成为野指针 *ptr = 20; // 未定义行为 局部变量指针逃逸函数返回局部变量的指针,但局部变量生命周期结束后,指针失效。cpp int* getLocalPtr() { int num = 10; return # // num 在函数结束后销毁,返回的指针悬垂 } 多线程竞争一个线程释放内存,另一个线程仍在使用指针,导致野指针问题。 野指针的危... 2025年09月02日 3 阅读 0 评论
2025-08-06 现代C++中nullptr比NULL好在哪?类型安全空指针的深入解析 现代C++中nullptr比NULL好在哪?类型安全空指针的深入解析 引言:空指针的演进史在传统的C/C++中,NULL通常被定义为0或(void*)0,这种设计存在明显的类型缺陷。C++11引入的nullptr关键字不仅解决了历史遗留问题,更体现了现代C++对类型安全的极致追求。本文将揭示这一改进背后的深层逻辑。一、NULL的类型缺陷cpp // 典型NULL实现define NULL 0// 或define NULL ((void*)0)NULL的本质是整型零的宏定义,这会导致以下问题: 类型模糊性:函数重载时可能匹配到非预期的版本cpp void func(int); void func(char*);func(NULL); // 调用的是func(int)而非func(char*) 模板推导灾难:在模板中NULL会被推导为int类型cpp template void f(T param);f(NULL); // T被推导为int而非指针类型 跨平台兼容性问题:不同编译器对NULL的实现可能不同 二、nullptr的革命性设计nullptr是std::nullptr_t类型的常量,具有以下核心优势: 真正的指针类型: cpp decltype... 2025年08月06日 19 阅读 0 评论