首页 百科知识 函数内部无法访问指针指向的值

函数内部无法访问指针指向的值

时间:2022-10-17 百科知识 版权反馈
【摘要】:动态内存分配是指在程序运行过程中,根据需要而分配内存空间的方式。在C系统的函数库中提供的动态分配和释放内存空间的函数主要有:功能:在内存动态存储区分配一段长度为size个字节的连续空间,如果分配成功,函数返回一个指向该区域起始地址的指针。例7-10 使用动态内存分配方式,为10个整型变量分配存储空间并依次赋值1~10,然后在屏幕显示出来,最后系统回收这些存储空间。

7.7 动态内存分配函数

动态内存分配是指在程序运行过程中,根据需要而分配内存空间的方式。在数组应用中,如定义的静态数组太小,则不能满足应用需要,如定义太大,则浪费存储空间。这种情况下,采用动态内存分配的方式可满足这类实际需要多少存储空间就分配多少的应用需要。在C系统的函数库中提供的动态分配和释放内存空间的函数主要有:

1.malloc函数

函数原型:void*malloc(unsigned int size);

功能:在内存动态存储区分配一段长度为size个字节的连续空间,如果分配成功,函数返回一个指向该区域起始地址指针。如因内存空间不够等原因分配未成功,则返回空指针(NULL)。

说明:函数返回的指针类型为void,即不指向任何具体的类型,如果将该指针指向一个具体类型的指针变量,则必须进行强制性类型转换。

例如:

int*p;

p=(int*) malloc(10*sizeof(int));

2.calloc函数

函数原型:void*calloc(unsigned int n,unsigned int size);

功能:在内存动态存储区分配n个长度为size个字节的连续空间,如果分配成功,函数返回一个指向该区域起始地址的指针,否则返回空指针(NULL)。

说明:calloc函数用于为具有n个元素的一维数组动态分配存储空间,每个元素的长度为size个字节。

3.free函数

函数原型:void free(void*p);

功能:释放指针p指向的存储空间,free函数无返回值。

说明:p为最近一次调用malloc函数或calloc函数返回的指向动态存储区的指针。

4.rea lloc函数

函数原型:void*realloc(void*p,unsigned int size);

功能:将指针p所指向的存储空间,重新分配改变为size个字节,并将原存储空间存放的数据拷贝到新分配的存储空间。如果分配成功,函数返回一个指向新存储空间起始地址的指针,否则返回空指针(NULL)。

说明:

(1)重新分配的内存空间如比原先分配的大,则将原存储空间的数据完全拷贝,如比原先分配的小,则将原存储空间的前size个字节数据拷贝到新分配的存储空间。

(2)为了增加或减少存储空间,系统新分配存储空间的起始地址不一定与原来的地址相同。

注意:

(1)最好在同一个函数内动态分配和释放存储空间。

(2)最好在定义指针时将指针初始化为NULL,在释放指针后也将指针赋值为NULL。这样便于在判断指针有效性时,用p==NULL判断指针是否为空指针。

(3)ANSI C标准要求动态分配存储空间需要使用“stdlib.h”头文件。

例7-10 使用动态内存分配方式,为10个整型变量分配存储空间并依次赋值1~10,然后在屏幕显示出来,最后系统回收这些存储空间。

img599

运行结果如图7.7.1所示。

img600

图7.7.1 动态内存分配

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈