【问题标题】:Not getting the actual size of allocated memory to a pointer [duplicate]没有将分配内存的实际大小分配给指针[重复]
【发布时间】:2016-03-26 15:19:50
【问题描述】:

我正在尝试为 100 个整数分配空间。但最终得到 2 并且不知道为什么!我尝试了malloc()calloc,但可以理解的是没有区别。

代码:

#define MAX 100

    int *arr = (int *)calloc(MAX, sizeof(int)); //same with malloc(MAX * sizeof(int))

    printf("MAIN before memset: %d | %d\n",
    (int)(sizeof(arr)/sizeof(arr[0])), (int)(sizeof(arr)));

    if(!arr) {
            fprintf(stderr, "A malloc error occured.\n");
            exit(1);
    }
    memset (arr, 0, MAX);
    printf("MAIN: %d\n", (int)(sizeof(arr)/sizeof(arr[0])));

输出:

MAIN before memset: 2 | 8
MAIN: 2

我缺少什么?我只是想为 100 个整数分配一个数组/指针。

【问题讨论】:

标签: c pointers memory-management malloc sizeof


【解决方案1】:

在您的代码中,arr 是一个指针,在指针上使用 sizeof 可以得到指针的大小,而不是分配给该指针的内存量。

在您的情况下,sizeof(arr) 为您提供int * 的大小,sizeof(arr[0]) 为您提供int 的大小,具体取决于您的平台和编译器。

也就是说,你不能直接从指针本身获得分配内存的大小,你需要自己去跟踪它。

【讨论】:

    猜你喜欢
    • 2011-01-16
    • 1970-01-01
    • 2021-05-07
    • 2021-04-13
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    相关资源
    最近更新 更多