to iFreeBSD:
我在VC6.0环境下测试的是这样子. 你的结论是什么? 你用是什
么环境?
to viwa :"这样改了还是有问题,p所指的空间是动态申请的,再
函数内部FREE掉,STR变为野指针,再printf时会得到预料之外的
结果". 我测试的结果也不是这样的.内存无法通过子函数来传递,
所以申请内存成功与否在此处并不起作用.不管Free与否,即使在子函数中存在着泄露问题,在外面str都一直
是NULL. 我在VC6.0环境下测试的.
交流一下大家.
[QUOTE]to iFreeBSD:
我在VC6.0环境下测试的是这样子. 你的结论是什么? 你用是什
么环境?
to viwa :"这样改了还是有问题,p所指的空间是动态申请的,再
函数内部FREE掉,STR变为野指针,再printf时会得到预料之外的
结果". 我测试的结果也不是这样的.内存无法通过子函数来传递,
所以申请内存成功与否在此处并不起作用.不管Free与否,即使在子函数中存在着泄露问题,在外面str都一直
是NULL. 我在VC6.0环境下测试的.
交流一下大家.
[/QUOTE]
我用的FreeBSD,cc编译器.
指针不是存储空间,只是对存储空间的引用.
str = (char *)malloc(100) //只是让str引用一块由malloc()分配的100字节的空间.
字符串 "gskgshdfh" 本身具有静态存储期,即生命周期为当从程序被编译开始到程序结束.
所以:str = "gskgshdfh" 完全合法,即使没有str = (char *)malloc(100)这条语句.
free(str)并不能释放str,str依旧还是引用(指向)"gskgshdfh" . 不信自己在其后加条printf("%#p" ,str);
所以程序不能显示"gskgshdfh"的原因是main()中的str和display()中的str具有完全不同的名字空间.
过来瞧瞧
不知道大家有没有运行这个程序?