动态内存分配中的大小错误

时间:2016-02-04 19:37:26

标签: c arrays pointers malloc sizeof

我对此代码的输出感到困惑:

#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

它应该给我40个字节?我错过了什么吗?

1 个答案:

答案 0 :(得分:5)

  

它应该给我40个字节?

不,不是。

在你的代码中,timing_output_filename是一个指针,在指针上使用sizeof运算符会产生指针本身的大小,而不是分配的内存(指针)的大小。

在您的代码中,sizeof(timing_output_filename)sizeof(char *)相同,因此它会像平台一样生成指向char的指针大小。

注意:sizeof生成类型为size_t的结果,因此您应使用%zu格式说明符来打印结果。