C中的malloc:之前和之后的大小相同?

And*_*rew 3 c

我遇到了问题.我试图获取int数组中的元素数量,而不传递任何显式参数,只是指向int数组的指针.现在我的好奇心:

int * set;
printf("-- %d --", sizeof(set)); //4
set=(int *) malloc(n*sizeof(int));
printf("-- %d --", sizeof(set)); //4  
Run Code Online (Sandbox Code Playgroud)

为什么值在malloc未初始化之前和之后都是相同的.谢谢
UPDATE:
有没有办法获得int数组的长度?

Dan*_*her 8

因为sizeof在编译时被评估并产生所述的大小类型set,一个指针int.


Eri*_* J. 6

没有通用的方法来测量C中指针所指向的内存大小,除了字符串按惯例终止的特殊情况.

sizeof 将产生指针的大小(32位系统上4个字节,64位系统上8个字节),而不是指向的内存.

如果要跟踪分配的内存大小,选项包括:

  • 在单独的变量中跟踪它
  • 引入一个特殊的数组终止符(例如,int 如果您的应用程序永远不会有效地使用该值,则为最小值或最大值.
  • 使用备用内存管理库(对于dmallocdmalloc_examine,它将返回指向的内存大小).除了您想要使用扩展内存API的地方之外,这些应该在最少或没有代码更改的情况下直接进入.