Chinaunix

标题: 这样释放内存可以吗? [打印本页]

作者: 臭臭泥    时间: 2004-04-28 15:10
标题: 这样释放内存可以吗?

  1. int main()
  2. {
  3.         char *p,*p1;

  4.         p = (char *)malloc(1000);
  5.         p1 = p+500;
  6.         free(p1);
  7.         free(p);
  8.         return 0;
  9. }
复制代码

系统内部是怎么执行的?
在free(p1)后,前500字节还能用吗?
作者: FH    时间: 2004-04-28 15:20
标题: 这样释放内存可以吗?
没有free(p1)这种用法
作者: windflowers1976    时间: 2004-04-28 15:32
标题: 这样释放内存可以吗?
  1. #ifndef ptrFree
  2. #define ptrFree(ptr) {  if(ptr!=NULL)\
  3.                            free(ptr);\
  4.                            /*printf ( */if ( DEBUGMEM ) TraceLog ( stdout, __LINE__, "ptrFree", __FILE__, "ptrFree [addr=0x%x]\n", ptr );\
  5.                            ptr=NULL;\
  6.                         }
  7. #endif
复制代码

作者: 臭臭泥    时间: 2004-04-28 16:53
标题: 这样释放内存可以吗?
[quote]原帖由 "FH"]没有free(p1)这种用法[/quote 发表:


我是问如果这样用,系统是怎么处理的。
作者: windflowers1976    时间: 2004-04-28 17:01
标题: 这样释放内存可以吗?
原帖由 "臭臭泥" 发表:


我是问如果这样用,系统是怎么处理的。

如何写听你,当不当看系统.
作者: xhl    时间: 2004-04-28 17:11
标题: 这样释放内存可以吗?
类似C++的悬挂引用,肯定死掉了!
作者: flw    时间: 2004-04-28 18:31
标题: 这样释放内存可以吗?
原帖由 "臭臭泥" 发表:


我是问如果这样用,系统是怎么处理的。

处理结果是异常,C/C++ 标准上没有讲异常时系统应该怎么办。
这就看你的编译器和系统是如何处理了。

不管它们如何处理,对你来讲都不过分,因为你没有按照要求做。
你可以试一下。
然后把结果告诉我们。
作者: GrayGe    时间: 2004-04-28 19:22
标题: 这样释放内存可以吗?
取决与当时内存的快照、C库的实现以及CPU有无MMU。
作者: tiansky    时间: 2004-04-28 19:56
标题: 这样释放内存可以吗?
不会出问题的.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2