【发布时间】:2015-06-30 20:08:08
【问题描述】:
这是我的代码。
#include<stdio.h>
typedef struct {
int a,b;
} integers;
void main() {
integers *ptr = (integers *)malloc(10*sizeof(integers));
printf("%d",sizeof(*ptr)); // prints 8
}
根据我对 Malloc 的了解,上面的代码实际上应该保留 10x8=80 字节的内存供 ptr 指向。
那么为什么使用 sizeof(*ptr) 只能得到 8?如何找到分配给 ptr 的总大小?
【问题讨论】:
-
因为 sizeof 是编译时构造,而不是运行时,
*ptr也意味着ptr[0]是 8 个字节 :) -
分配给
ptr的总大小是您请求的大小,您知道它是10*sizeof(integers),除非malloc()返回您应该经常检查的NULL。 -
是的,但是现在,该 ptr 并没有特别指向任何东西。那么,有什么办法可以知道我使用了多少分配的内存?
-
C语言中malloc返回的指针不需要进行类型转换。
-
语法上写着
sizeof expr(或sizeof (type))只要看看源代码,找出你的表达式的size是什么.顺便说一句:main()应该返回 int。
标签: c