面试题答案
一键面试在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
指向的内存,这会导致未定义行为,很可能引发程序崩溃。
系统可能给出的错误提示
- 在Linux系统下:常见的错误提示可能是“Segmentation fault”(段错误)。这是因为程序试图访问未分配给它的内存区域,违反了内存保护机制。
- 在Windows系统下:可能会弹出一个错误对话框,提示程序已停止工作,具体错误信息可能因运行环境而异,比如“访问冲突”等。
总之,野指针访问是非常危险的,因为它会导致未定义行为,可能引发程序崩溃、数据损坏等严重问题。为了避免野指针问题,在释放内存后,应将指针设置为NULL
,这样可以防止意外地再次访问已释放的内存。例如:
free(ptr);
ptr = NULL;
这样,当尝试访问ptr
时,由于ptr
为NULL
,程序会在访问之前就停止,从而避免了未定义行为。