【问题标题】:Why the size of malloc-ed array and non-malloced array are different? [duplicate]为什么 malloc-ed 数组和 non-malloced 数组的大小不同? [复制]
【发布时间】:2017-01-19 12:47:32
【问题描述】:
#include<stdio.h>
#include<stdlib.h>

int main (int argc, char *argv[]) {

    int* arr1 = (int*)malloc(sizeof(int)*4);
    int arr2[4];


    printf("%d \n", sizeof(arr1));
    printf("%d \n", sizeof(arr2));

    free(arr1);

    return 0;
}

输出

8
16

为什么?

【问题讨论】:

标签: c arrays pointers malloc sizeof


【解决方案1】:

Arrays are not pointers.

在您的代码中,arr1 是一个指针,arr2 是一个数组。

arr1 的类型是 int *,而 arr2 的类型是 int [4]。所以sizeof 会产生不同的结果。你的代码相当于

sizeof (int *);
sizeof (int [4]);

也就是说,sizeof 产生size_t 类型的结果,所以您应该使用%zu 来打印结果。

【讨论】:

  • 如何测量堆的大小,堆上的malloc指针是什么?
  • @JeungwooPark 很遗憾,你不能从返回的指针直接知道分配内存的大小,你必须自己跟踪。
【解决方案2】:

arr1 是一个指针,当你调用 sizeof(arr1) 这将是你指针的大小。 但 arr2 表示 4 个整数的内存块。

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    相关资源
    最近更新 更多