2017-05-31 48 views
-4

如果使用非动态分配的指针作为参数调用free(),会发生什么情况?在静态内存上调用C free()函数(在未动态分配的内存上)

E.g

some_struct foo; 
function(&foo); 

void function(some_struct* param){ 
    free(param); 
} 

谢谢!

+4

_if 参数由内存管理 功能早些时候返回的指针不匹配,或者如果空间已经通过调用释放释放或realloc时, 行为是undefined._ – BLUEPIXY

+0

这将汇编? foo不是一个指针。当你尝试时发生了什么? – ThingyWotsit

+0

对不起。让我重写这个问题 – Aizen

回答

0

这违背了规则,所以任何事情都可能发生。 free()可能会打印一条错误消息。该程序可能会因分段违例或其他内存访问错误而崩溃。错误可能会被默默忽略。或者该错误可能导致malloc/free堆的损坏,从而在稍后调用malloc或free时发生错误或崩溃。

+0

如果是这样的话,有没有什么办法让一段代码知道指针是指向动态分配的内存还是静态分配的内存? – Aizen

+0

@Aizen代码(或程序员)可以“知道”的唯一方法就是自己记住它。没有什么能够告诉你的'is_malloced_pointer(p)'函数。 –

+0

感谢您的解释! – Aizen