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纠正了我