如何使用使用malloc分配的指针知道数组的大小?
#include <stdio.h>
int main(){
int *ptr = (int *)malloc(sizeof(int * 10));
printf("Size:%d",sizeof(ptr));
free(ptr_one);
return 0;
}
在这种情况下,我只得到指针的大小,即8.如何修改代码以获得40的数组大小。
答案 0 :(得分:6)
你不能。
您需要进行簿记并自己跟踪。使用new
,您可以分配动态内存,在释放内存时,您只需调用delete
,它知道已释放多少内存,因为语言在内部处理它,以便用户无需担心簿记。如果你仍然明确需要它,那么你需要通过单独的变量来跟踪它。
答案 1 :(得分:0)
如果您的机器是32位,您将获得指针大小始终为任何数据类型的4个字节
如果您的机器是64位,您将获得指针大小始终为任何数据类型的8个字节
如果声明静态数组,则可以使用sizeof
int a[10];
printf("Size:%lu",sizeof(a));
但是你没有得到被指针阻挡的数组大小。使用malloc动态分配块的内存。
见下面的代码:
#include <stdio.h>
#include<stdlib.h>
int main()
{
int i;
int *ptr = (int *)malloc(sizeof(int) * 10);
// printf("Size:%lu",sizeof(ptr));
// In the above case sizeof operater returns size of pointer only.
for(i=1;ptr && i<13 ;i++,ptr++)
{
printf("Size:%d %p\n",((int)sizeof(i))*i,ptr);
}
return 0;
}
输出:
Size:4 0x8ec010
Size:8 0x8ec014
Size:12 0x8ec018
Size:16 0x8ec01c
Size:20 0x8ec020
Size:24 0x8ec024
Size:28 0x8ec028
Size:32 0x8ec02c
Size:36 0x8ec030
Size:40 0x8ec034 //after this there is no indication that block ends.
Size:44 0x8ec038
Size:48 0x8ec03c