栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言学习记录:分配内存malloc()、free()、calloc()

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言学习记录:分配内存malloc()、free()、calloc()

直接用数组分配内存

int Array[100];

静态数据在程序载入时分配内存,而自动数据在程序执行块时分配,并在程序离开该块时销毁。

malloc()

该函数接受一个参数:所需内存字节数。

malloc()会分配内存,但不会对其赋名。但是,能返回动态分配内存块的首字节地址!

malloc()可用于返回指向数组的指针,指向结构的指针等,通常该函数的返回值会被强制转换为匹配的类型。

要用强制类型转换为匹配的类型,提高代码可读性。

例子:

double * p;
p = (double *) malloc(30*sizeof(double));

注意:可以用p[0]、p[1]等来访问分配的空间。啊哈~ 这不就是当数组用!

另外:

p = (double *) malloc(n*sizeof(double));

使用n,变量定义分配内存也是被允许的。

free()

free()释放内存。

free()的参数是指针(malloc()函数返回的地址),指向由malloc()分配的一块内存。

动态分配的内存数量只会增加,除非用free()进行释放。

(这是不是有的程序运行一段时间就会卡,然后重启就好了的罪魁祸首??没有释放内存?)

calloc()

也可用calloc()分配内存

double * p;
p = (double *) calloc(30*sizeof(double));

第1个参数:所需的存储单元的数量。第2个参数:存储单元的大小。

calloc()会把块中所有位置都设置为0。

free()也用来释放calloc()分配的内存。、

malloc()比较变长数组

malloc()创建的数组可以在其他程序访问,用完释放即可。

变长数组为自动存储类型,会被自动释放。

free()指针变量可以和malloc()指针变量不同,只要地址相同就可以。

malloc声明二维数组也可,就是麻烦

函数示例:

int main()
{
    
    double * p;
    p = (double *) malloc(30*sizeof(double));


    //操作


    free(p);

    
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/857584.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号