📜  悬空,无效,空指针和野生指针(1)

📅  最后修改于: 2023-12-03 15:09:56.525000             🧑  作者: Mango

悬空,无效,空指针和野生指针

在程序员的日常工作中,常常会遇到各种指针相关的问题。其中,悬空指针,无效指针,空指针和野生指针是比较常见的问题。本文将深入介绍这些指针的含义和影响。

悬空指针

悬空指针是指一个指针变量指向的内存地址已经被释放或者没有被初始化。这种指针是不安全的,因为它们指向的内存地址可能已经被其他程序使用,从而导致内存数据被破坏。在使用悬空指针的时候,程序可能会崩溃或者产生未知的行为。

int *p;
*p = 10; //悬空指针,因为p没有被初始化
无效指针

无效指针是指一个指针变量已经定义,但是它没有指向有效的内存地址。这种情况通常发生在指针被初始化为NULL或者被赋值为0或者-1等无效地址的情况下。在使用无效指针的时候,程序可能会崩溃或者产生未知的行为。

int *p = NULL;
*p = 10; //无效指针,因为p指向NULL
空指针

空指针是指一个指针变量被显式地赋值为NULL。空指针不指向任何内存地址,它可以用于表示指针变量没有指向任何有效的内存地址。在使用空指针的时候,程序不会崩溃,但是需要注意指针变量是否被正确地初始化。

int *p = NULL;
if (p == NULL) {
    printf("p is a null pointer\n");
}
野生指针

野生指针是指一个指针变量指向的内存地址已经被回收或者被其他程序使用了。这种指针是不安全的,因为它们可能指向的是非程序所分配的内存空间,从而导致程序崩溃或者产生未知的行为。在使用指针变量的时候,需要确保它们指向有效的内存地址。

void foo() {
    int *p = (int *)malloc(sizeof(int));
    free(p);
}
void bar() {
    int *p;
    *p = 10; //野生指针,因为p指向的内存地址已经被释放
}
总结

悬空指针,无效指针,空指针和野生指针是指针相关问题中的常见问题。在编写程序时,需要注意指针变量是否初始化,以及在使用指针变量的时候是否指向了有效的内存地址。如果不确定指针的状态,最好先将指针变量初始化为NULL。