C语言-----野指针

时间:2023-03-10 02:26:20
C语言-----野指针

C语言-----野指针

问题所在

1、局部指针变量没有被初始化

2、使用已经释放过后的指针

3、指针所指向的变量在指针之前被销毁

4、结构体成员指针未初始化, 没有为结构体指针分配足够的内存 ,内存越界(考虑使用柔性数组)和泄露

避免规则

1、用malloc申请了内存之后,应该立即检查指针值是否为NULL,防止使用值为NULL的指针

2、牢记数组的长度,防止数组越界操作,考虑使用柔性数组

3、动态申请操作必须和释放操作匹配,防止内存泄露和多次释放

4、free指针之后必须立即赋值为NULL

malloc用于从堆中分配一块指定大小的内存,以void *的类型返回这块内存的起始地址。malloc的参数就是要分配的内存的大小,以字节为单位。 
所以如果要分配1个整型空间就需要malloc(sizeof(int)),由于返回的void *不能直接赋值给int *,所以还要进行一次强制类型转换int * s=(int*)malloc(sizeof(int));

struct Student
{
char* name;
int number;
};

int main()
{
struct Student s;

strcpy(s.name, "gggg"); // OOPS!   ////////////////////////////////////野指针,,不能随便赋值,因为s是一个局部变量,name保存的地址是个随机值,不能往随机值里写东西/////////////////////////////////////////////

s.number = 99;

return 0;
}