c语言用malloc申请完数组后,怎样再查看申请数组的大小

c语言用malloc申请完数组后,怎样再查看申请数组的大小。
比如malloc申请了一维整形数组a,我原来通过sizeof(a)查看到的是申请a用的单位字节4。但我希望得到的是总字节长。谢谢

C语言本身不提供查看动态分配的内存大小,因为分配内存是系统的API函数完成的。

但是通过调用系统的API函数可以查看内存分配大小,不然肯定无法释放这些内存了。

以windows为例:

#include<iostream>
using namespace std;
int main()
{
int *p=(int *)malloc(sizeof(int)*10);
cout<<sizeof(p)<<endl;
cout<<_msize(p)<<endl;
system("PAUSE");
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-26
没法看,分配内存是系统的API函数完成的,除非分配时记住了大小,否则你找不到记录大小的位置,虽然记录这个大小的数据一定存在。
第2个回答  2015-10-28
1、一般是获取不到的,不过这个也得看编译器是如何实现的。VC++在每次分配的动态数组的起始地址之前记录动态数组的大小,这样就可以得到内存空间大小。
2、例如:
int *a=new int[12];
cout<<"动态数组占用内存大小:"<<*(a-4)<<endl; //为48
cout<<"动态数组中元素个数:"<<*(a-4)/sizeof(a)<<endl; //为12
int *b;
b=(int*)malloc(sizeof(int)*12);
cout<<*(b-4)/sizeof(b)<<endl; //为12
b=(int*)realloc(b,sizeof(int)*16);
cout<<*(b-4)/sizeof(b)<<endl; //为16
第3个回答  2013-07-26
只能根据调用malloc时候的参数……
第4个回答  2015-10-15
这个涉及两个存储区域,堆和栈,你用malloc申请的空间在堆上,char a[10]这个是在栈上。

堆和栈最重要一个区别是,栈是系统管理的的,他负责回收和释放,所以有个概念叫作用域,变量的作用域一结束,栈就回收变量的资源。但是堆是程序员管理的,你不释放,除非进程结束,这个空间就一直在那,就有了一定灵活性。
回答了申请堆的作用。

堆在实现的时候确实是在底层是链表的形式没错,栈是连续的空间。
相似回答