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

时间:2012-05-04 20:35:40

标签: c

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

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

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

5 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

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

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

指针是32位或64位。

含义4或8个字节。

答案 4 :(得分:0)

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纠正我一样