我可以检查指针是否由 malloc/calloc/realloc 分配吗?

标签 c memory-management

<分区>

我想知道是否可以检查传递给函数的指针是否由 malloc/calloc/realloc 分配?

int main(){
    struct something o;
    struct something *a;
    a = malloc(sizeof(struct something));
    freeSome(&o);/*This would normally throw an (corruption?) error*/
    freeSome(a);/*This is fine*/
}

void freeSome(struct something * t){
    if (/*expression here*/){
        free(t);
    }
}

我知道您通常会检查是否 t == NULL,但我只是想知道是否有可能查看是否已为给定指针分配了内存。

最佳答案

不,你不能。

基本上,您不需要这样做。如果你想写一个辅助函数来释放一些给定指针的内存,那么你应该有意识地并且明确地传递一个动态分配的指针到特定的内存区域来做所以。

C 中的原始指针无法传输有关它们指向的内存的额外信息。如果你想得到这样的信息,你将不得不传递一个额外的包装器来保存你感兴趣的指针,例如:

typedef struct my_pointer
{
   void  *ptr;
   int   is_dynamically_allocated;
}  ptr;

但这会造成巨大的内存/时间损失。

关于我可以检查指针是否由 malloc/calloc/realloc 分配吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16266895/

相关文章:

c++ - Valgrind 条件跳转或移动取决于使用可变参数函数的链式调用时未初始化的值

C计算分配的内存

docker - 为特定的Docker容器Debian设置max_map_count

c - 就地与返回 C 中的新设计模式

c++ - 运算符 new/delete 和析构函数

c - 对c中的链表进行排序(两个节点之间的插入)?

c++ - 如何将编译选项传播到 CMake 中的子目录?

algorithm - 如何管理 Buddy 算法中的 header block ?

c - C中的内存有效标志数组

c - 保证预写日志记录实现