怎么查看动态分配内存空间的大小(c语言)。
用malloc函数分配的内存空间大小用什么函数能显示出来大小。比如sizeof(int)可显示int空间的大小,p=(int*)malloc(10000)怎么显示出来10...
用malloc函数分配的内存空间大小用什么函数能显示出来大小。比如sizeof(int)可显示int空间的大小,p=(int *)malloc(10000)怎么显示出来10000的空间大小
展开
4个回答
展开全部
1、这个空间是自己分配的,既然已经写了p=(int *)malloc(10000)那就分配10000的大小,还需要显示多少大小。对于一个指向一块内存的指针如果用比如sizeof(p)显示大小(int * p=new int[10]),也只是显示4,代表首地址大小,不能显示正块内存的大小,而且根本没有意义。
2、动态内存分配,可以自由的分配指定大小的内存空间。当程序运行时,程序员并不清楚某一数据需要的具体内存空间大小时,可以使用动态分配。
malloc函数原型
void *malloc(int nSize)
分配一个nSize大小的内存空间,如果分配成功则返回地址空间的首地址,如果分配失败则返货NULL
nSize一般使用 sizeof(类型A)*N 的计算方式获取大小。意思为:为分配n个类型A所占空间的大小。
获取的指针地址需要强制转换为指定类型
例如:int *p = (int*)malloc(sizeof(int)*100);
使用malloc动态分配的内存空间需要使用free函数手动释放。
2、动态内存分配,可以自由的分配指定大小的内存空间。当程序运行时,程序员并不清楚某一数据需要的具体内存空间大小时,可以使用动态分配。
malloc函数原型
void *malloc(int nSize)
分配一个nSize大小的内存空间,如果分配成功则返回地址空间的首地址,如果分配失败则返货NULL
nSize一般使用 sizeof(类型A)*N 的计算方式获取大小。意思为:为分配n个类型A所占空间的大小。
获取的指针地址需要强制转换为指定类型
例如:int *p = (int*)malloc(sizeof(int)*100);
使用malloc动态分配的内存空间需要使用free函数手动释放。
展开全部
这个空间是你自己分配的,既然已经写了p=(int *)malloc(10000)那就给你分配10000的大小,还需要显示多少大小?
对于一个指向一块内存的指针如果用比如sizeof(p)显示大小(int * p=new int[10]),也只是显示4,代表首地址大小,不能显示正块内存的大小,而且根本没有意义,不就是10吗
对于一个指向一块内存的指针如果用比如sizeof(p)显示大小(int * p=new int[10]),也只是显示4,代表首地址大小,不能显示正块内存的大小,而且根本没有意义,不就是10吗
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己malloc出来当然知道字节大小,如果把指针传给一个函数呢,函数如果不知道其空间大小,对其操作时是有很大溢出风险的,但我又不想增加一个传入参数,sizeof()的确算不出指针指向的空间大小,那只能将指针交给与他人使用的时候,把空间大小也告诉对方。所以有时候没办法要妥协一下
只通过指针貌似无法知道指针指向的空间大小,那么free函数又是怎么知道呢。malloc在分配空间的时候会多分配一些空间来存放分配信息。(据说在每个内存块的最前的4个字节就存放了malloc的字节大小信息,可以自己写一个函数把这些数据提出来,我目前还没有试验过)
只通过指针貌似无法知道指针指向的空间大小,那么free函数又是怎么知道呢。malloc在分配空间的时候会多分配一些空间来存放分配信息。(据说在每个内存块的最前的4个字节就存放了malloc的字节大小信息,可以自己写一个函数把这些数据提出来,我目前还没有试验过)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在c语言中,要在堆上分配空间,需要使用内存申请函数。一般用malloc。
void
*
malloc(int
size);
可以申请一段长度为size字节的空间,并返回空间的首地址。
要清空分配的内存空间,也就是将该空间所有字节均赋值为0,可以使用memset函数。
该函数声明与string.h中,形式为
void
memset(void
*start,
int
value,
int
size);
如果要清空空间的首地址为p,大小为len,则可以调用
memset(p,
0,
len);
void
*
malloc(int
size);
可以申请一段长度为size字节的空间,并返回空间的首地址。
要清空分配的内存空间,也就是将该空间所有字节均赋值为0,可以使用memset函数。
该函数声明与string.h中,形式为
void
memset(void
*start,
int
value,
int
size);
如果要清空空间的首地址为p,大小为len,则可以调用
memset(p,
0,
len);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询