首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有人能解释一下这里使用malloc作为指针发生了什么吗?

有人能解释一下这里使用malloc作为指针发生了什么吗?
EN

Stack Overflow用户
提问于 2013-02-26 15:01:27
回答 5查看 141关注 0票数 0
代码语言:javascript
复制
#include<stdio.h>
int main(){
    int * ptr=(int *)malloc(40);
    printf("%d",sizeof(ptr));
}

当我运行这个的时候,输出是因为8...what正在发生,here...why是输出8吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-26 15:04:48

malloc()返回一个指向40字节内存(可能是10个整数)的指针,并将其分配给ptrsizeof(ptr)是8的原因是因为您使用的是64位机器,而指针的大小是8字节。

您应该在malloc()中使用sizeof(),因为它的形式很好,并且可以避免在类型更改大小(跨平台或其他任何情况)时出现问题。如果你真的想要10个整数的空间,那么使用:

代码语言:javascript
复制
int *ptr = malloc(10 * sizeof *ptr);

这将分配ptr指向的类型大小的10个批次,在本例中为int。这样做的好处是您可以在不更改malloc()的情况下更改类型

票数 2
EN

Stack Overflow用户

发布于 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进行编译

票数 2
EN

Stack Overflow用户

发布于 2013-02-26 15:03:56

变量ptr是一个指向整数的指针,在你的系统中它恰好有8字节的大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15083231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档