一:野指针:
char *ptr;
定一个指针,没有赋值,用NULL。
char *ptr = NULL 即表示指向空,不能再做赋值,不能对0地址操作访问。
//#define NULL (void *)o
如果出现段错误,看看对NULL有没有赋值。
如何避免野指针而不是杜绝:
1.如果没有对指针进行赋值,可把指针指向空,可避免野指针
2.如果出现段错误,可查看有没有对NULL进行赋值
3.当你要把指针指向的空间赋值时,应先分配一下空间
char *ptr=“hello world”
*ptr=L
不对,会出现段错误,ptr是个常量,没有办法赋值。
ptr=(char *)malloc(100*sizeof(char));蓝色部分是为了增加可移植性
指针必须是相同类型赋值,如果不是相同类型1.会越界2.取数据不完整
void*:称为万能指针
缺点:不能作取值操作
二:获取字符串的两种方法。以及malloc,calloc,ralloc的使用注意点
获取字符串两种方法
1.char ptr[100];
1#include<stdio.h>
2 #include<stdlib.h>
3 #define MAX_SIZE 1024
4 int main()
5 {
6 char *ptr=(char *)malloc(MAX_SIZE*sizeof(char)); malloc分配内存空间。
7 if(NULL==ptr)
8 {
9 printf("malloc error!\n"); 看内存是否分配成功。
10 exit(1);
11 }
12 //memset(ptr,'\0',sizeof(ptr)); 其中‘\0’是表示拿0来填充这100个字节。
13 memset(ptr,'\0',sizeof(char)*MAX_SIZE); 指把空间全部清空。
14 //bzero(ptr,MAX_SIZE)
15 scanf("%s",ptr);
16 printf("ptr=%s\n",ptr);
17 free(ptr); 释放空间。释放以后,ptr没值了,但是还保存了原来的地址, 如果不置为空,会变成野指针
18 ptr=NULL;
19 return 0;
20 }
malloc的头文件#include<stdlib.h>
用了空间再用一次的时候一定要记得清空
通常都是先分配空间,然后检验空间是否分配成功,把空间里面的残留元素都清空,然后初始化,再释放,最后再初始化。
通常用memset来初始化一块内存。
malloc,relloc,calloc的区别。
char *ptr=(char *)malloc(MAX_SIZE*sizeof(char));