段错误:野指针成因之一

在计算机当中我们创建变量的过程是,向内存申请空间来储存。而往往我们在使用指针的时候容易写成int*p这种,而没有申请内存空间。p所指向的就会是随机的空间,而这个给空间可能不存在,可能正在被使用就会造成访问越界,即段错误;

所以段错误的意思:访问了不能访问的内存空间;

所以常常说指针的初始化过程尤为重要,当我们不确定指针需要指向什么,就可以写

int*p=NULL;这个时候内存空间为我们找了一个空内存,指针指向它,当我们确定了指针需要指向什么的时候就可以在重新指向,例如:int a = 10;int*p=&a;这样就完成了重新指向;

那么根据段错误的成因,就需要了解怎么合法使用内存:

1.系统给分配的内存,例如:int a=0(也就是初始化过程同上);

2.用户向内存申请空间(堆内存),记住是动态内存分配(常常使用malloc);

下面简单写个代码,介绍如何使用malloc,注释部分详细介绍了如何使用:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int* p;//因为申请的内存是随机的,也就是随机指向一个地址
	*p = 100;//给随机的地址赋值,就会造成段错误:访问了不能访问的内存;
	//如何合法的使用内存;
	//1.系统给分配的内存,例如:int a=0;
	//2.用户向内存申请空间(堆内存),记住是动态内存分配(malloc)
	char* str = (char*)malloc(32);//malloc是向内存申请空间,返回的是内存,需要进行类型转换;
	free(str);//使用完以后要释放内存,不然会造成内存泄露;
	*str = NULL;//使用完以后把*str指向为空
	return 0;
}

需要注意的地方:
1.用户向内存申请空间是(堆内存),记住是动态内存分配运行的时候分配内存;

2.malloc是向内存申请空间,返回的是内存,需要进行类型转换(根据使用类型确定)

3.free(str);//使用完以后要释放内存,不然会造成内存泄露;

4.记得包含头文件#include<stdlib.h>;

5.*str = NULL;//使用完以后把*str指向为空;

  • 11
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值