gcc 4.4.1 c89
我有以下代码片段:
#include <stdlib.h>
#include <stdio.h>
char *buffer = malloc(10240);
/* Check for memory error */
if(!buffer)
{
fprintf(stderr, "Memory error\n");
return 1;
}
printf("sizeof(buffer) [ %d ]\n", sizeof(buffer));
Run Code Online (Sandbox Code Playgroud)
但是,sizeof(缓冲区)总是打印4.我知道char*只有4个字节.但是,我已经分配了10kb的内存.那么尺寸不应该是10240吗?我想知道我在想什么?
非常感谢任何建议,
Pét*_*rök 16
你要的是a的大小char*确实是4,而不是缓冲区的大小.该sizeof运营商不能返回一个动态分配的缓冲区的大小,只有在编译时已知的静态类型和结构的大小.
sizeof不适用于动态分配(在C99中有一些例外).你在sizeof这里的使用只是给你指针的大小.此代码将为您提供所需的结果:
char buffer[10240];
printf("sizeof(buffer) [ %d ]\n", sizeof(buffer));
Run Code Online (Sandbox Code Playgroud)
如果malloc()成功,指向的内存至少与您要求的一样大,因此没有理由关心它分配的实际大小.
此外,您已经分配了10 kB,而不是1 kB.