动态内存知识总结

来源:互联网 发布:淘宝幸福狐狸是正品吗 编辑:程序博客网 时间:2024/06/13 23:15

malloc()函数
函数原型:extern void *malloc(unsigned int num_bytes);
函数功能:分配长度为num_bytes字节的内存块。
函数的使用:
①该函数接受一个参数:所需的内存字节数。
②malloc()函数会找到合适的匿名空闲内存,并且返回动态内存块的首字节地址。
③因此,可以把该地址赋给一个指针变量,并且用指针访问这块内存。
④注意的是:其返回的指针为void类型的指针,所以使用时根据自己的需求而进行类型转换。
⑤通常,malloc()函数要与free()配套使用,free()函数的参数是malloc()函数返回的地址,该函数释放malloc()分配的内存。

代码示范如下:

#include<stdio.h>#include<stdlib.h>   //为malloc()和free()提供原型int main(){    int *p;    p = (int *)malloc(10*sizeof(int));    if(p != NULL)    {        int i = 0;        for(i=0; i<10; i++)        {            *(p+i) = i;            printf("%d\n", *(p+i));        }    }    else    {        printf("没有足够的内存!");        return 0;    }    free(p);    p = NULL;//释放完成后,P是个野指针,养成好习惯对让p指向空    return 0;}

realloc()函数
函数原型:extern void *realloc(void *mem_address, unsigned int newsize);
函数功能:判断指针是否有足够的空间,如果有,扩大men_address指向的地址,并将men_address返回,
如果空间不够,则按照newsize大小分配空间,并将原数据拷贝到新的空间,自动释放原空间,反回新的地址。

代码示范如下:

#include<stdio.h>#include<stdlib.h>int main(){    int i = 0;    int *p;    int *p1;    p = (int *)malloc(10*sizeof(int));    if(p != NULL)    {        for(i=0; i<10; i++)        {            *(p+i) = i;            printf("%d\n", *(p+i));        }    }    p1 = p;    p1 = (int *)realloc(p,10*sizeof(int));    if(p1 != NULL)    {        for(i=0; i<10; i++)        {            *(p1+i) = i;            printf("%d\n", *(p1+i));        }    }    else    {        printf("没有足够的内存!");        return 0;    }    free(p1);    p1 = NULL;    return 0;}

calloc()函数
函数原型:void *calloc(size_tn, size_t size);
函数功能:和malloc()函数类似,但是它把所有位都设初始化为0

动态内存使用注意事项:
①对空指针的解引用
②对动态内存的越界访问
③释放非动态开辟内存
④释放动态内存的一部分
⑤对已经释放的内存再次访问
⑥对同一块内存的多次释放

最后,为了您和他人的安全,请务必使用free()!!!
请务必使用free()!!!
务必使用free()!!
必使用free()!!!
使用free()!!!
用free()!!!
free()!!!**

0 0
原创粉丝点击