我有一个非常简单的测试程序,在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;
}
如果我最后没有打电话给free()
,它会显示正确的信息并退出。如果我包含free()
调用,它会因总线错误而崩溃。我在其他程序中有free()
的其他调用也会导致分段错误。
即使我自己为*paths
分配内存,free()
也会导致总线错误。有没有什么理由试图释放内存导致崩溃?
答案 0 :(得分:5)
因为你不应该free
getenv()
返回的值(它是一个静态变量)。
答案 1 :(得分:1)
getenv()返回的内存不是由malloc()分配的,因此不应该被free()释放。通常,不应该使用free()释放不属于malloc()系列的C标准库函数,或者实际上释放它们。
答案 2 :(得分:1)
指针指向的字符串 由此功能返回的不得 由程序修改。
这不是你的记忆。