我怎样才能知道c中指针变量分配的内存大小[重复]

2023-11-24

我在这种情况下遇到了一些问题,您能请您提供一下想法吗?

main()
{
char *p=NULL;
p=(char *)malloc(2000 * sizeof(char));
printf("size of p = %d\n",sizeof (p));
}

在此程序中,它打印 4 个 (char *) 值,但我需要分配多少字节 那。


您还可以实现 malloc 的包装器,并在 malloc 返回的指针之前自由添加标签(例如分配的大小和其他元信息)。这实际上是 C++ 编译器通过对虚拟类的引用来标记对象的方法。 这是一个工作示例:

#include <stdlib.h>
#include <stdio.h>

void * my_malloc(size_t s) 
{
  size_t * ret = malloc(sizeof(size_t) + s);
  *ret = s;
  return &ret[1];
}

void my_free(void * ptr) 
{
  free( (size_t*)ptr - 1);
}

size_t allocated_size(void * ptr) 
{
  return ((size_t*)ptr)[-1];
}

int main(int argc, const char ** argv) {
  int * array = my_malloc(sizeof(int) * 3);
  printf("%u\n", allocated_size(array));
  my_free(array);
  return 0;
}

该方法相对于具有大小和指针的结构的优点

 struct pointer
 {
   size_t size;
   void *p;
 }; 

是你只需要更换malloc and free来电。所有其他指针操作不需要重构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我怎样才能知道c中指针变量分配的内存大小[重复] 的相关文章

随机推荐