如何计算指针指向内存的大小?

在我写的一个函数中:

char *ab; ab=malloc(10); 

然后在另一个函数中我想知道ab指针指向的内存大小。 有什么方法我可以知道ab指向10个内存字符?

这是一个秘密,只有free()才知道。 它可能在您的系统中,但以完全依赖于实现的方式。

有点尴尬,但如果你想把所有东西放在一起:

  typedef结构
 {//数据大小后跟数据(C只是技巧!不适用于C ++)
     int维;  //数据元素的数量
     int data [1];  //可变数量的数据元素
 malloc_int_t;

 malloc_int_t * ab;

 int dimension = 10;
 ab = malloc(sizeof(* ab)+(dimension-1)* sizeof(int));
 ab-> dimension = dimension;

 ab-> data [n] //数据访问 

我已将数据类型更改为int,以使代码成为更通用的模板。

不,你没有标准的方法来做到这一点。 你必须将指向内存的大小和指针一起传递,这是一个常见的解决方案。

也就是说

 void f(char* x) { //... } 

使用

 void f(char *x, size_t length) { //.... } 

并在您的代码中

  char *ab = malloc( 10 ); f( ab, 10 ); 

你不能(无论如何)。 你必须自己跟踪大小。

malloc某些实现可以为您提供访问该信息的API,但标准中没有相关规定。

没有办法,你必须将分配的内存大小存储在另一个变量中。

不,不幸的是。

您需要将块的大小与指针一起传递。

没有。

现在,正如所说,有非便携式黑客可以做到这一点,但依靠它们是不安全的。

如果你100%确定知道内存是通过malloc()分配的,你可以将指针倒回几个字节并检查’malloc节点’,用于跟踪已经分配了哪些内存部分,哪些部分有不。 但是,我不能强调这一点 – 不要依赖于此。

大小是您传递给malloc的大小,您可以使用全局变量或宏来记住它。

无法从指针本身推断出已分配内存的大小。 由于abchar *sizeof(ab)sizeof(char *) ,这显然与分配的内存块的大小不同。

由于您使用所需大小调用malloc ,因此您知道大小是多少。 将此数字与指向需要知道大小的函数的指针一起传递。

我有一个结构和一个指向其内存地址的字符指针。 所以将它与你的问题联系起来,我想找到它所指向的内存位置的大小,即结构的大小。 所以你在逻辑上做的是找到指针创建的对象的大小。 这对我有用:

  unsigned char * buffer= Library1Structure; int x=sizeof(Library1Structure); 

所以x的值告诉我指针缓冲区指向的内存位置的大小。