为了账号安全,请及时绑定邮箱和手机立即绑定

为什么就算输了入一百个数,照样没事;照样输出;

为什么就算输了入一百个数,照样没事;照样输出;

C
呼如林 2023-04-01 14:10:33
#include <stdio.h>  #include <stdlib.h>  #include <string.h>#include <malloc.h>main(){char str[10];char *a;a=(char *)malloc(10*sizeof(char));gets(a);//free(a);puts(a);//结果意外:就算输了入一百个数,照样没事;照样输出;printf("%s\n",a);printf("%d\n",_msize(a));}问题1:动态内存函数好像没意义啊,我用简单的char str[10],与a=(char *)malloc(10*sizeof(char));他们不都是占用了10个大小内存么;难道malloc的存在就是有些东西只是临时存在一下?用完就释放了,但这样意义何在,比如我建立数组的目的就是要存东西,但考虑到怕浪费内存才想到用malloc,但malloc用free释放后,里面的数据又全没有了。再说也不灵活,我以为malloc会自动境加大小空间,结果还是要给个大小值,那何必!问题2:a的值没有超,难道malloc的功能只是开了一个首地址,后面超的全部自动放在连续地址上么?
查看完整描述

3 回答

?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

malloc就是用来进行动态分配的,由程序员自己分配内存,正常情况下一般变量是由系统自动分配到栈内存中的,而malloc也是动态在堆中分配

查看完整回答
反对 回复 2023-04-03
?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

malloc就是返回一个由你规定大小的指针,你可以用它动态的创建一些数据,用后要用free把指针指向的地址的空间释放(删掉)以节约运行空间。

int* p;
p=(int*)malloc(sizeof(int));
*p=55;
printf("%d",*p);
free(p);
另一个calloc()是返回数组指针。
type* p=(strcut type*)calloc(n,size);

查看完整回答
反对 回复 2023-04-03
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

开辟内存。比如 int *p; p=(int *)malloc (100*sizeof(int)); 它开辟100个int单元,即400字节。然后p指向第一个元素。之后也可以用p[0],p[1]

查看完整回答
反对 回复 2023-04-03
  • 3 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信