动态内存分配中的错误大小
Wrong size in dynamic memory allocation
我对这段代码的输出感到困惑:
#include <stdio.h>
#include <stdlib.h>
#define TIMING_OUTPUT_FILENAME_MAX_LENGTH 40
int main (int argc, char **argv)
{
char *timing_output_filename = malloc(TIMING_OUTPUT_FILENAME_MAX_LENGTH);
printf("requested buffer size is %ld bytes and pointer size is %ld bytes\n",
sizeof(timing_output_filename),
sizeof(*timing_output_filename));
return 0;
}
这是输出:
requested buffer size is 8 bytes and pointer size is 1 bytes
它应该 return 我 40 字节?我错过了什么吗?
It's supposed to return me 40 bytes?
不,不是。
在您的代码中,timing_output_filename
是一个指针,在指针上使用 sizeof
运算符会产生指针本身的大小,而不是分配的内存(指向指针)的大小。
在您的代码中,sizeof(timing_output_filename)
与 sizeof(char *)
相同,因此它会像在您的平台中一样生成指向 char
的指针的大小。
注意:sizeof
产生 size_t
类型的结果,因此您应该使用 %zu
格式说明符来打印结果。
我对这段代码的输出感到困惑:
#include <stdio.h>
#include <stdlib.h>
#define TIMING_OUTPUT_FILENAME_MAX_LENGTH 40
int main (int argc, char **argv)
{
char *timing_output_filename = malloc(TIMING_OUTPUT_FILENAME_MAX_LENGTH);
printf("requested buffer size is %ld bytes and pointer size is %ld bytes\n",
sizeof(timing_output_filename),
sizeof(*timing_output_filename));
return 0;
}
这是输出:
requested buffer size is 8 bytes and pointer size is 1 bytes
它应该 return 我 40 字节?我错过了什么吗?
It's supposed to return me 40 bytes?
不,不是。
在您的代码中,timing_output_filename
是一个指针,在指针上使用 sizeof
运算符会产生指针本身的大小,而不是分配的内存(指向指针)的大小。
在您的代码中,sizeof(timing_output_filename)
与 sizeof(char *)
相同,因此它会像在您的平台中一样生成指向 char
的指针的大小。
注意:sizeof
产生 size_t
类型的结果,因此您应该使用 %zu
格式说明符来打印结果。