以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  指针问题探讨  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=44741)


--  作者:fangel2000
--  发布时间:4/2/2007 5:12:00 PM

--  指针问题探讨
char *p = (char *) malloc(100);
strcpy(p, “hello”);
free(p); // p 所指的内存被释放,但是p 所指的地址仍然不变

if(p != NULL) // 没有起到防错作用
{
strcpy(p, “world”); // 出错
}

大家来探讨一下上面的这个程序,free(p)以后,p成了野指针:p 所指的地址仍然不变,但是p指向的内容改变了,所以说p!=null,为什么下面strcpy会出错捏?


--  作者:一分之千
--  发布时间:4/3/2007 4:57:00 PM

--  
该指针所指内存已经被释放,如何还能进行拷贝工作?
杯子都没了你把水盛哪里啊?
--  作者:cqthinking
--  发布时间:4/6/2007 5:48:00 PM

--  
#include <iostream>
using namespace std;
main(){
 char *p=(char *)malloc(100*sizeof(char));
 strcpy(p,"aaaaaaa");
 cout<<p<<endl;
 free(p);
 cout<<p<<endl;
 if(p!=NULL){
  strcpy(p,"bbbbbb");
  cout<<p<<endl;
 }
}

没有错,早我的机器上编译执行都可以,vc++6.0


--  作者:fangel2000
--  发布时间:4/7/2007 8:46:00 AM

--  
运行是没有错误,但是的确存在问题
我想问的是:这里的内存释放到底是什么意思??就这里不太懂。虽然内存释放了,但是P所指的地址仍然不变啊
--  作者:卷积内核
--  发布时间:4/7/2007 8:08:00 PM

--  
你释放掉内存,也就是该指针在你后面没有重新赋值之前是没有用的了,你还考虑它里面内容有什么意义呢?释放内存是给别的程序用,如果没有释放功能那有多少内存够你用呢?128M用一分钟满了,2G内存用不了一个小时就完了,那你写的程序有什么意义呢?你的程序运行起来需要多少内存才够呢?
--  作者:fangel2000
--  发布时间:4/9/2007 4:40:00 PM

--  
"该指针在你后面没有重新赋值之前是没有用的了"
呵呵。知道了
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
74.219ms