在静态内存(非动态分配内存)上调用C free()函数

在静态内存(非动态分配内存)上调用C free()函数,c,memory-management,free,C,Memory Management,Free,如果使用非动态分配的指针作为参数调用free()会发生什么 例如 谢谢 这是违反规定的,所以几乎什么事都可能发生free()可能会打印错误消息。程序可能会因分段冲突或其他内存访问错误而崩溃。错误可能会被默默忽略。或者该错误可能导致malloc/free堆损坏,从而在以后调用malloc或free时可能发生错误或崩溃。如果参数与内存管理函数先前返回的指针不匹配,或者如果通过调用free或realloc释放了空间,行为未定义。是否编译?foo不是指针。你试的时候怎么了?对不起。让我重新写一个问题如果

如果使用非动态分配的指针作为参数调用free()会发生什么

例如


谢谢

这是违反规定的,所以几乎什么事都可能发生
free()
可能会打印错误消息。程序可能会因分段冲突或其他内存访问错误而崩溃。错误可能会被默默忽略。或者该错误可能导致malloc/free堆损坏,从而在以后调用malloc或free时可能发生错误或崩溃。

如果参数与内存管理函数先前返回的指针不匹配,或者如果通过调用free或realloc释放了空间,行为未定义。是否编译?foo不是指针。你试的时候怎么了?对不起。让我重新写一个问题如果是这样的话,有没有办法让一段代码知道指针指向的是动态分配的内存还是静态分配的内存?@Aizen代码(或程序员)唯一能“知道”的方法就是记住它本身。没有什么比
is\u malloced\u指针(p)
函数更能告诉您。
some_struct foo;
function(&foo);

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