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

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

int * set; printf("-- %d --", sizeof(set)); //4 set=(int *) malloc(n*sizeof(int)); printf("-- %d --", sizeof(set)); //4 

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

因为sizeof在编译时计算并产生set 类型的大小,所以指向int的指针。

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

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

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

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

您正在测量的项目是指向整数的指针( int* )。 指向整数的指针是4字节。

sizeof不测量分配给指针的内存量。 它只测量“项目”本身(在这种情况下,指针)。

指针是32位或64位。

含义4或8个字节。

 int * set; printf("-- %d --", sizeof(set)); //4 set=(int *) malloc(n*sizeof(int)); printf("-- %d --", n*sizeof(int)); //n*sizeof(int) is the size of your malloc'd memory 

希望有所帮助。 在你的最后一个语句中,你仍然在询问机器上4个字节的单个整数指针的大小。 要获得malloced内存区域的大小,您需要使用与malloc函数内部相同的表达式。

并且整数指针不一定与int本身的大小相同,因为Mat纠正了我