没有将分配内存的实际大小获取到指针

Not getting the actual size of allocated memory to a pointer

我正在尝试为 100 个整数分配 space。但最终得到 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

我还缺少什么?我只是想将 array/pointer 分配给 100 个整数。

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

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

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