MST

星途 面试题库

面试题:C语言中野指针如何导致程序崩溃

请举例说明在C语言中,野指针是怎样引发程序崩溃的,并且阐述该过程中系统可能给出的错误提示。
43.1万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

在C语言中,野指针是指指向一个已释放的内存地址或者未初始化的内存地址的指针。以下是一个简单的例子说明野指针如何引发程序崩溃:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr = (int *)malloc(sizeof(int));
    if (ptr == NULL) {
        return 1;
    }

    *ptr = 10;
    printf("Value: %d\n", *ptr);

    free(ptr); // 释放内存
    // 此时ptr成为野指针,因为指向的内存已被释放

    // 尝试访问野指针指向的内存,这可能导致程序崩溃
    printf("Value after free: %d\n", *ptr);

    return 0;
}

在这个例子中,我们首先使用malloc分配了内存,并将指针ptr指向该内存。然后我们对该内存进行赋值并打印其值。接着,我们使用free释放了这块内存,此时ptr就成为了野指针。最后,我们尝试再次访问ptr指向的内存,这会导致未定义行为,很可能引发程序崩溃。

系统可能给出的错误提示

  1. 在Linux系统下:常见的错误提示可能是“Segmentation fault”(段错误)。这是因为程序试图访问未分配给它的内存区域,违反了内存保护机制。
  2. 在Windows系统下:可能会弹出一个错误对话框,提示程序已停止工作,具体错误信息可能因运行环境而异,比如“访问冲突”等。

总之,野指针访问是非常危险的,因为它会导致未定义行为,可能引发程序崩溃、数据损坏等严重问题。为了避免野指针问题,在释放内存后,应将指针设置为NULL,这样可以防止意外地再次访问已释放的内存。例如:

free(ptr);
ptr = NULL;

这样,当尝试访问ptr时,由于ptrNULL,程序会在访问之前就停止,从而避免了未定义行为。