指针常见错误

本文介绍了两种常见的指针错误:一是引用未初始化的指针,这种情况下指针可能指向不确定的内存地址,可能导致运行时错误;二是向存放NULL地址的指针变量写入数据,这在32位系统中会触发非法操作,造成程序崩溃,这类错误通常在运行时才会暴露。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 引用未初始化的指针错误

如果指针变量未初始化,那么编译器会让他指向一个固定的,不用的地址。

#include<stdio.h>
int main(void)
{
	int *p, *q;
	printf("p = %#x\n", p);
	printf("q = %#x\n", q);
	return 0;
}

2 往一个存放NULL地址的指针变量里面写入数据

#include<stdio.h>
int main(void)
{
	int i = 3;
	int *j = NULL;
	*j = i;
	return 0;
}

现在将指针初始化为指向NULL。NULL也是一个指针变量。NULL指向的是内存中地址为 0 的内存空间。以32位系统为例,内存单元地址的范围是0x0000 0000 ~ 0xffff ffff。 其中0x00000000就是NULL所指向的内存单元的地址。但是在操作系统中,该内存单元是不可用的,凡是试图往该内存单元中写入数据的操作都会被视为非法操作,从而导致程序错误。同样,这种错误在编译的时候也不会报错,只有在执行的时候才会出错。这种错误也属于“段错误”。

博客
v8worker
05-08 2933
05-06 2920
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值