C++学习

一、指针

野指针(Dangling Pointer)是指指向已经释放或无效的内存地址的指针。当你释放了一块内存区域或者该内存区域已经超出其作用域,但仍然保留了指向该内存区域的指针,那么这个指针就成为野指针。

野指针可能会导致程序出现未定义的行为,例如访问无效内存,导致程序崩溃、数据损坏等问题。

以下是一个野指针的示例:

int* ptr = new int; // 分配一个新的整型对象的内存,并将其地址赋值给指针
delete ptr; // 释放内存

// 在这之后,ptr 指针成为了野指针
// 这时使用 ptr 访问或修改内存会产生未定义行为

在上述示例中,ptr 指针在释放内存后没有被置为 nullptr,而继续使用该指针进行操作会出现问题。

为了避免野指针的出现,应该养成以下良好的编程习惯:

在释放内存后,将指针设置为 nullptr,避免产生野指针。
1.避免在超出作用域的情况下继续使用指针。

//用于安全释放动态分配的内存
/** Memory Safe Free */
#define SAFE_FREE(p)            \
    do {                        \
        if (nullptr != (p)) {   \
            delete (p);            \
            (p) = nullptr;      \
        }                       \
    } while (0)

#define SAFE_FREE_ARRAY(p)            \
    do {                        \
        if (nullptr != (p)) {   \
            delete[] (p);            \
            (p) = nullptr;      \
        }                       \
    } while (0)
//宏定义为什么要使用do{……}while(0)形式:
//https://blog.csdn.net/xiaoyilong2007101095/article/details/77067686

2.尽量使用智能指针(如 std::unique_ptr 和 std::shared_ptr),它们可以自动管理指针生命周期,避免忘记释放内存或重复释放内存的问题。

你可能感兴趣的:(c++,学习,开发语言)