malloc()函数怎么体现动态分配内存?已经分配好的内存,要往里面再加数据,内存空间会自动调大吗?

 我来答
东哥zld
推荐于2016-08-08 · 机械自动化爱好者
东哥zld
机械自动化爱好者
采纳数:204 获赞数:17735
毕业不久,正在努力创造自己的骄傲

向TA提问 私信TA
展开全部
已经分配好的内存,要往里面再加数据,内存空间会自动调大。

  动态内存分配,可以自由的分配指定大小的内存空间。当程序运行时,程序员并不清楚某一数据需要的具体内存空间大小时,可以使用动态分配。
  malloc函数原型
  void *malloc(int nSize)
  分配一个nSize大小的内存空间,如果分配成功则返回地址空间的首地址,如果分配失败则返货NULL
  nSize一般使用 sizeof(类型A)*N 的计算方式获取大小。意思为:为分配n个类型A所占空间的大小。
  获取的指针地址需要强制转换为指定类型
例如:int *p = (int*)malloc(sizeof(int)*100);
  使用malloc动态分配的内存空间需要使用free函数手动释放。
金色潜鸟
推荐于2017-11-25 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5626万
展开全部
malloc 动态分配内存, 分配好的内存空间不会自动调大。
但可以用 realloc 调整大小。可以调大,也可以调小。
要求 malloc, realloc 后,系统真实分给的空间大小可以用 _msize() 返回。
有的编译器用 msize()返回.

例如:
#include<stdio.h>#include<stdlib.h>
#include<malloc.h>

int main(){
char *str;
str = (char *) malloc(16); // 要求分配 16字节 strcpy(str, "123456789012345");
printf("String = %s -- true memory size=%d\n", str,_msize(str));
/* Reallocating memory */ str = (char *) realloc(str,24); // 重新要求 分配24字节
strcpy(&str[15], "abcde");
printf("String = %s -- true memory size= %d\n", str,_msize(str));
free(str); return(0);
}
追问
重新分配是在原来地址空间还是重新分配一个地址?
追答
保持原来空间和数据,再增加(也可以减少)。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cossbow
2013-04-27 · TA获得超过697个赞
知道小有建树答主
回答量:798
采纳率:100%
帮助的人:221万
展开全部
比如要分配n个int型数据空间:
int *p = ( int* ) malloc ( n * ( sizeof( int ) ) ) ;
也就是分配了 n * sizeof(int) 个字节的内存,并且让int型指针 p 指向首地址
这是你可以使用这些内存,注意这些内存空间是连续的,可以像数组一样使用 p[i]=13
跟数组一样,访问越界了就会产生非法访问的错误,编译时不检查,
跟数组不一样,数组声明时长度必须是常量,动态分配却可以是变量,
用玩后要释放掉,用free(p) ,这时p必须是指向首地址
你的疑问:内存分配是动态的,也就是可以用变量控制的,如果想要想matlab那样自动调大,当然可以,不过你有两种方法:自己写代码,或找别人的代码,c语言没有提供这类函数,而c++里面有标准容器,其中的vector就是自动调整的
不知能不能解答你的疑问,呵呵,如果要彻底弄明白,先学学C语言吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2013-04-27 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:84%
帮助的人:3672万
展开全部
malloc本身不能体现自动调整类的动态分配内存,它只能实现在程序运行时决定的内存尺寸的申请,比如你打开不同的图象时,对于不同尺寸的图象要临时决定申请多大内存。这种动态申请是相对于事先由程序告诉编译器要申请多大尺寸的数组这类情况的,在这个意义上,malloc申请的内存是在程序运行时才申请而不是事先申请好的,所以叫“动态”。
在malloc申请好的内存中添加数据不会使系统自动调整相关内存尺寸,除非你设计程序来调整,比如发现数据量超出预先定义尺寸则重新申请一块大些的内存,并将原来的数据存放过来,再释放原先malloc的内存;这些操作类似于realloc函数的功能。如果再想复杂和智能只能编程序实现了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式