#include<stdio.h>
int main(){
int * ptr=(int *)malloc(40);
printf("%d",sizeof(ptr));
}当我运行这个的时候,输出是因为8...what正在发生,here...why是输出8吗?
发布于 2013-02-26 15:04:48
malloc()返回一个指向40字节内存(可能是10个整数)的指针,并将其分配给ptr。sizeof(ptr)是8的原因是因为您使用的是64位机器,而指针的大小是8字节。
您应该在malloc()中使用sizeof(),因为它的形式很好,并且可以避免在类型更改大小(跨平台或其他任何情况)时出现问题。如果你真的想要10个整数的空间,那么使用:
int *ptr = malloc(10 * sizeof *ptr);这将分配ptr指向的类型大小的10个批次,在本例中为int。这样做的好处是您可以在不更改malloc()的情况下更改类型
发布于 2013-02-26 15:03:34
sizeof运算符是编译时运算符,在您的机器上,任何指针的大小都是8字节。
无法检索malloc-ed内存区的动态大小。否则你必须知道它,或者把它放在某个地方。
您可以考虑使用Boehm's conservative garbage collector,然后调用GC_malloc而不是malloc,不需要调用free (或GC_free),并且可以使用GC_size(p)从p开始获取先前GC_malloc-ed内存区的大致大小(但我不建议使用GC_size)。
如果在Linux上使用malloc,请学习如何使用valgrind查找内存泄漏bug,以及如何使用gcc -Wall -g进行编译
发布于 2013-02-26 15:03:56
变量ptr是一个指向整数的指针,在你的系统中它恰好有8字节的大小。
https://stackoverflow.com/questions/15083231
复制相似问题