发表日期: 2022-09-01 14:41:58 浏览次数:109
上往建站提供网站建设,网站推广,网店设计,网站建设,企业网站,网站制作,网页设计,网站建设,企业网站制作,网页制作 高端定制网站建设,H5页面设计开发,微网站,微信运营,移动端设计开发,手机端网站,小程序,致力于苏州企业网站建设与公司网站制作,全国用户超10万,10余年的网站开发和建站经验,主营:网站建设、网络推广、微信公众号代运营、商城小程序开发定制、网店设计等业务,专业团队服务,效果好。。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
林芝公众号代运营公司
当上面的代码被编译和执行时,它会产生下列结果:
Name = Zara AliDescription: Zara ali a DPS student in class 10th
上面的程序也可以使用 calloc() 来编写,只需要把 malloc 替换为 calloc 即可,如下所示:
calloc(200, sizeof(char));
当动态分配内存时,您有完全控制权,可以传递任何大小的值。而那些预先定义了大小的数组,一旦定义则无法改变大小。
当程序退出时,操作系统会自动释放所有分配给程序的内存,但是,建议您在不需要内存时,都应该调用函数 free() 来释放内存。
或者,您可以通过调用函数 realloc() 来增加或减少已分配的内存块的大小。让我们使用 realloc() 和 free() 函数,再次查看上面的实例:
当上面的代码被编译和执行时,它会产生下列结果:
Name = Zara AliDescription: Zara ali a DPS student.She is in class 10th
您可以尝试一下不重新分配额外的内存,strcat() 函数会生成一个错误,因为存储 description 时可用的内存不足。
对于 void 指针,GNU 认为 void * 和 char * 一样,所以以下写法是正确的:
description = malloc( 200 * sizeof(char) );
但按照 ANSI(American National Standards Institute) 标准,需要对 void 指针进行强制转换,如下:
description = (char *)malloc( 200 * sizeof(char) );
同时,按照 ANSI(American National Standards Institute) 标准,不能对 void 指针进行算法操作:
void * pvoid;
pvoid++; //ANSI:错误
pvoid += 1; //ANSI:错误
// ANSI标准之所以这样认定,是因为它坚持:进行算法操作的指针必须是确定知道其指向数据类型大小的。
int *pint;
pint++; //ANSI:正确
更多内容参考:C 语言中 void* 详解及应用
长颈鹿
长颈鹿
pan***all@qq.com
参考地址
4年前 (2018-09-01)
Blithe
cn1***0441251@126.com
参考地址
12
对于我们手动分配的内存,在 C 语言中是不用强制转换类型的。
description = malloc( 200 * sizeof(char) ); // C 语言正确。
description = malloc( 200 * sizeof(char) ); // C++ 错误
但是 C++ 是强制要求的,不然会报错。
Blithe
Blithe
cn1***0441251@126.com
参考地址
4年前 (2019-01-24)
L.~
wyl***6@163.com
48
动态可变长的结构体:
typedef struct
{
int id;
char name[0];
}stu_t;
定义该结构体,只占用4字节的内存,name不占用内存。
stu_t *s = NULL; //定义一个结构体指针
s = malloc(sizeof(*s) + 100);//sizeof(*s)获取的是4,但加上了100,4字节给id成员使用,100字节是属于name成员的
s->id = 1010;
strcpy(s->name,"hello");
注意:一个结构体中只能有一个可变长的成员,并且该成员必须是最后一个成员。
L.~
L.~
wyl***6@163.com
3年前 (2019-08-20)
ddddddd
442***286@qq.com
9
直接使用原来的指针变量接收 realloc 的返回值是可能存在内存泄漏的。例如以下语句:
description = (char *) realloc( description, 100 * sizeof(char) );
若 realloc 函数执行失败,description 原先所指向的空间不变,realloc 函数返回 NULL。
此时 description 的值被赋为 NULL, 但原先指向的空间未被释放,造成了内存泄漏。
ddddddd
ddddddd
442***286@qq.com
5个月前 (04-09)
ddd
266***3172@qq.com
2
1.stdlib.h中的几个函数操作内存;calloc()分配指定个数指定大小的连续内存块,返回值是这些连续内存块组成的大内存块地址;malloc()分配指定大小的一块内存,返回值是内存的地址;realloc()通过已分配的内存块的地址扩展或者减小内存的大小;free()释放指定地址对应的内存块,无返回值;alloc是allocate 分配的缩写;malloc mess+allocate 整块的分配
2.stdlib中几个内存管理的函数返回值是 void *,表示任意类型的指针,或者说它可以转化成任意类型;
3.内存管理的意义:数组、基本数据类型、结构体、共用体都是固定的为数据分配内存空间,而内存管理却可以直接申请一块内存,然后给其指定存储的数据类型,之后就可以存储数据了,且还可以根据数据的大小来扩展内存空间;
ddd
ddd
266***3172@qq.com
3个月前 (05-22)
上往建站提供微信小程序+公众号商城+企业网站建设一站式微信网站商城营销系统,微信小程序是一种依附于微信体内即点即用,无需下载安装即可使用的轻应用,它开启了移动端“触手可及”的梦想,致力于苏州企业网站建设与公司网站制作,全国用户超10万,10余年的网站开发和建站经验,主营:网站建设、微信公众号代运营、商城小程序开发定制、网店设计等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
备案号: 苏ICP备2021016738号-6
CopyRight © 2021 上往建站 All Right Reserved 未经许可不得复制转载
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: https://www.768800.club 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
全国服务热线:400-111-6878