仅使用返回的指针获取malloc的大小

lil*_*roo 3 c arrays malloc pointers sizeof

我希望能够改变我的数组的大小,所以我这样创建一个:

int* array;
array = malloc(sizeof(int)*10);//10 integer elements
Run Code Online (Sandbox Code Playgroud)

我可以像往常一样使用它像数组一样,但是当我试图找到它的大小时:

size = sizeof(array)/sizeof(int);
Run Code Online (Sandbox Code Playgroud)

我得到了答案1,因为它没有将其识别为指向数组

如何获得阵列的大小?(我知道它在技术上不是一个数组,但有没有办法计算出分配的内存块的整个大小?)

我也正确地假设我在描述中说明了什么?如果我在技术上有所不及,请纠正我.

Ker*_* SB 10

指针指针,而不是数组.它永远不会被"识别为数组",因为它不是数组.

完全由来记住数组的大小.

例如:

struct i_must_remember_the_size
{
    size_t len;
    int * arr;
};

struct i_must_remember_the_size a = { 10, NULL };
a.arr = malloc(a.len * sizeof *a.arr);
Run Code Online (Sandbox Code Playgroud)

  • 如果实际上不知道使用“malloc”分配的大小,“free(arr)”如何知道要释放多少内存? (5认同)

md5*_*md5 5

在C标准和可移植性中,这是不可能的。请注意,某些编译器提供非标准扩展(跟踪它,例如msize)。

此外,sizeof运算符无法告诉您块的大小,因此它会产生指针的大小(请记住,它sizeof在编译时进行操作,可变长度数组除外)。

因此,您必须保留分配的大小,例如在数据结构中,例如:

#include <stddef.h>

typedef struct {
    int   *p;
    size_t n;
} array;
Run Code Online (Sandbox Code Playgroud)