正常调用free()时,为什么会出现总线错误或分段错误?

chu*_*son 1 c pointers memory-management

我有一个非常简单的测试程序,在Solaris 5.8上运行:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *paths;
    paths = getenv("PATH");
    printf("Paths: %s\n", paths);

    free(paths); // this causes a bus error
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我free()最后没有打电话,它会显示消息并退出.如果我包含该free()呼叫,它会因总线错误而崩溃.free()在其他程序中,我还有其他调用也会导致分段错误.

即使我为*paths自己分配内存,free()也会导致总线错误.是否有某些原因试图释放内存导致崩溃?

ken*_*ytm 5

因为你不应该freegetenv()(它是一个静态变量)返回的值.