动态内存分配课后小结(1)

原创 2016年05月31日 09:07:38

      我们知道,当我们声明一个数组的时候,必须要用一个常量指定数组的长度,这是由于它所需要的内存空间取决于数据。但是如果我们不能预测程序所需要的精确数组长度,为了保证足够的空间,常常声明一个很大的长度,由此便可能造成不必要的空间浪费。所以引入了动态内存分配的概念。

    在动态内存分配中,C函数库给我们提供了四个函数,分别是malloc(),realloc(),calloc()以及free()。

一.malloc()函数的用法及注意事项

例:#include<stdio.h>

      #inlcude<stdlib.h>

int main()

{

int i=0;

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

/*这里给指针p开辟了4个整形空间的大小,即40个字节。注意此处必须有强制类型转换,还有sizeof所求长度的对象类型*/

if(p=NULL)

{

printf("out of memory");

exit(-1);

/*此处相当于exit(EXIT_FAILURE);*/

for(i=0;i<10;i++)

{

p[i]=i;

}

return 0;

}

}

注意:单次malloc开辟出的空间是连续的,内容并未初始化,是一个随机值。多次开辟出来的不一定连续,所以要考虑内存碎片的问题。

二.calloc()

calloc()的主要功能和malloc()一样用于分配内存,但是与后者不同的是在返回的时候将内存全部初始化为0,这将节省初始化的时间,calloc的参数包括所需元素的数量和每个元素的字节数。

例:#include<stdio.h>

int main( )

{

int i=0;

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

for(i=0;i<10;i++)

{

p[i]=i;

}

return 0;

}

三.realloc()

这个函数主要用于修改已将分配的内存大小,在realloc(p,size)中,p指向前面已经分配好的内存,size指调整后的大小,而且p指向的内容必须是用malloc开辟出来的。如果在函数中调用了malloc函数,而且在函数调用之后不用free释放掉该空间,则该空间不会被释放,知道整个程序结束。

※在堆上开辟的空间,都必须用free()才能释放,例如malloc(),由此可说明free()内部有某种机制识别空间能否被free掉。

四,常见的动态内存错误

1.释放一部分开辟后的内容

#include<stdio.h>

int main( )

{

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

free(p+5);/*释放5个整型空间的大小*/

return 0;

}

※.free之后,p的指针并不为空,依然指向原来的地址,因此在释放之后,一定要将p赋成NULL,而且在使用指针之前一定要判断其是否为空,但是free掉一个空指针是可以的。


本文出自 “福大馨” 博客,请务必保留此出处http://10800121.blog.51cto.com/10790121/1725432

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++类和动态内存分配(1)

C++中的类和动态内存分配,关键的问题如下:1、调用构造函数的问题,创建对象时调用默认构造函数还是复制构造函数还是其他自定义构造函数?2、需不需要自定义复制构造函数和重载赋值操作符;3、类中成员的内存...

C++动态内存分配研究

  • 2010-05-31 14:37
  • 89KB
  • 下载

C++动态内存分配

动态内存分配  在C中动态分配内存的基本步骤有:  1.用malloc类的函数分配内存;  2.用这些内存支持应用程序;  3.用free函数释放内存。  这个方法在具体操作上可能存在一些小变化,不过...

深入讲解动态内存分配

  • 2009-02-17 08:54
  • 150KB
  • 下载

动态内存分配

  • 2015-05-14 11:39
  • 150KB
  • 下载

C10-动态内存分配

一、存储区划分 二、堆内存分配函数 三、其他内存分配函数 四、内存操作函数代码:void test(void) { printf(“void\n”); }int main(int ...

C语言之动态内存分配

  • 2014-05-29 14:10
  • 336KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)