【问题标题】:Correctly getting size of integer array created with malloc using c [duplicate]使用 c [重复] 正确获取使用 malloc 创建的整数数组的大小
【发布时间】:2014-12-26 18:24:40
【问题描述】:

我使用 malloc 和以下代码行创建了一个数组:

 int* array = (int*)malloc(12*sizeof(int));

我尝试通过以下方式获取尺寸:

int size = sizeof(array)/sizeof(int);

这会返回 2,而不是 12(我知道 sizeof(array[0] 更通用。) 令人困惑的是(对我而言),当我使用

创建一个数组时
int array[12] 

上面的代码行返回正确的大小:12。

此外,我可以用 12 个整数填充 int* 数组而不会出现分段错误,我不明白大小是否为 2。

谁能告诉我我做错了什么/ 如何获取在 c 中使用 malloc 初始化的数组的大小?

对不起,如果这是基本的,我环顾四周,找不到答案。

感谢您的宝贵时间。

【问题讨论】:

  • 第一个array 不是数组,而是指向int 类型元素的指针。第二个是!
  • 某处很可能有重复,但一般的答案是sizeof(array) 在第一种情况下给你指针的大小,不是数组的大小;没有办法仅根据指针来确定数组的大小。

标签: c


【解决方案1】:
int *arr = malloc(sizeof(int));

无需强制转换 malloc()。 arr 是一个指针,所以在第一种情况下,您使用的是

sizeof(arr)

它给你指针的大小而不是数组的大小。

在第二种情况下,你有一个数组

int arr[12];

在这里你得到你的数组arr 的大小是

sizeof(arr)/sizeof(int)

【讨论】:

    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    相关资源
    最近更新 更多