MST

星途 面试题库

面试题:C语言指针使用注意点之中等题

请简述C语言中野指针产生的原因,并举例说明如何避免野指针的产生。
45.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

野指针产生的原因

  1. 指针变量未初始化:指针在定义时,如果没有初始化,它会指向一个不确定的内存地址,成为野指针。例如:
int *ptr; // ptr 未初始化,是野指针
  1. 指针释放后未置为 NULL:当使用 freedelete 释放动态分配的内存后,如果没有将指针置为 NULL,指针仍然指向已释放的内存,后续对该指针的使用可能导致未定义行为。例如:
int *ptr = (int *)malloc(sizeof(int));
free(ptr); // 释放内存
// 此时 ptr 成为野指针,如果再次使用 ptr 进行解引用操作,如 *ptr = 10; 会导致未定义行为
  1. 指针越界访问:当指针指向数组时,如果访问超出数组边界的内存位置,可能导致野指针问题。例如:
int arr[5];
int *ptr = arr;
ptr += 10; // ptr 指向超出 arr 数组的内存,成为野指针

避免野指针产生的方法

  1. 初始化指针:在定义指针时,将其初始化为 NULL 或者指向一个合法的内存地址。例如:
int *ptr = NULL; // 初始化为 NULL
// 或者
int num = 10;
int *ptr2 = # // 指向合法内存地址
  1. 释放指针后置为 NULL:在使用 freedelete 释放内存后,立即将指针置为 NULL。例如:
int *ptr = (int *)malloc(sizeof(int));
free(ptr);
ptr = NULL; // 置为 NULL,避免野指针
  1. 防止指针越界:在访问数组等内存区域时,确保不超出其边界。例如:
int arr[5];
int *ptr = arr;
for (int i = 0; i < 5; i++) {
    *(ptr + i) = i; // 正确访问数组元素,不会越界
}