<分区>
在这种情况下我遇到了一些问题,你能提出你的想法吗?
main()
{
char *p=NULL;
p=(char *)malloc(2000 * sizeof(char));
printf("size of p = %d\n",sizeof (p));
}
在这个程序中,它打印了 4 个 (char *) 值,但我需要分配多少字节 那个。
<分区>
在这种情况下我遇到了一些问题,你能提出你的想法吗?
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 和 free 调用。所有其他指针操作都不需要重构。
关于c - 我怎么知道c中指针变量的分配内存大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7202069/