这个问题在这里已有答案:
-
Check if a pointer points to allocated memory on the heap 10个答案
-
Can you determine if a string if freeable in C? [duplicate] 5个答案
我想知道是否可以检查传递给函数的指针是否由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
,但我只是想知道是否有可能看到是否已为给定指针分配了内存 .
2 回答
不,你不能 .
基本上,你不应该这样做 . 如果你想编写一个辅助函数来释放给定指针的内存,那么你应该明确地并且明确地将动态分配的指针传递给某个特定的内存区域来执行此操作 .
C
中的原始指针无法传输有关它们指向的内存的额外信息 . 如果您想拥有此类信息,则必须传递一个包含您感兴趣的指针的附加包装器,例如:但这将是内存/时间的巨大损失 .
无法检查,你应该
NULL
初始化,然后测试NULL
确实从第7.20.3.2节开始,C99标准的自由功能: