程序生命周期较短或者比较简单,可以不用考虑这些。不用看下去了。
局部指针在使用完毕之后要释放掉。(参数指针和返回指针 不在此论,因为外部还会有指向内存地址的指针。在函数内释放反而会出错)如果不释放掉指针所指向的内存地址会一直保持着被占用的状态。如果多了(一次性运行超长时间或者超多调用局部指针)会导致内存不足的报错--内存泄漏。所以使用局部指针的时候建议malloc() free() // int *p 申请 p = (char *)malloc( 30 * sizeof(char) ); 指针使用~ 释放free(description);
局部指针指向内存地址的不确定性导致(间隔其他变量的申请地址),非一次性申请的内存空间不连续,被分割成各种小块。
使得应用程序不能申请到连续的大块内存而出错。所以需要内存管理。
申请一大块连续的内存空间。然后每次使用局部指针的时候都从这块空间里面申请,然后释放。不会影响到整体内存空间的连续性。
内存管理可以自己做。做一个状态表,用赋值的方式一次性申请一大块连续内存。通过状态表来判断是否使用 而不是NULL
也可以用操作系统带的内存管理 例如ucos
INT8U Partiontion[100][32] 一个状态表 100块,每一块32字节
INT8U *P
Partiontion = OSMemCreate(Partition, 100, 32, &err); 创建
P = OSMemGet(PartitionPtr, &err); 申请
指针使用~
OSMemPut(PartitionPtr, P); 释放
另外声明定义指针的时候。系统只分配了存储指针本身的内存,并未分配存储数据的内存。
定义之后给他赋值一个已经存在的地址。而不能直接赋值。
int *p;
int a=5;
p=5;//错误的 不能直接赋值。
p=&a;//正确,赋予了一个指向的地址。
或者 p=“字符串”; 因为在这里 双引号 做了3件事:
1.申请了空间(在常量区,永存!),存放了字符串
2. 在字符串尾加上了'/0'
3.返回地址