home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / lang / c / 11764 < prev    next >
Encoding:
Text File  |  1992-07-30  |  1.9 KB  |  46 lines

  1. Newsgroups: comp.lang.c
  2. Path: sparky!uunet!taumet!steve
  3. From: steve@taumet.com (Steve Clamage)
  4. Subject: Re: Pointers to freed memory
  5. Message-ID: <1992Jul30.164035.7349@taumet.com>
  6. Organization: TauMetric Corporation
  7. References: <1992Jul29.205834.11308@hubcap.clemson.edu> <3179@dozo.and.nl>
  8. Date: Thu, 30 Jul 1992 16:40:35 GMT
  9. Lines: 35
  10.  
  11. jos@and.nl (Jos Horsmeier) writes:
  12.  
  13. >In article <1992Jul29.205834.11308@hubcap.clemson.edu> mjs@hubcap.clemson.edu (M. J. Saltzman) writes:
  14. >|I know that a pointer to freed memory should never be dereferenced, 
  15. >|but is it standard-conforming to assign or do arithmetic with such
  16. >|pointers?
  17.  
  18. >As long as you do not dereference such a pointer (as you indicated
  19. >yourself,) everything is fine.  If pointer q contained a valid pointer
  20. >value _before_ the call to free(), it'll contain a valid pointer value
  21. >_after_ the call.
  22.  
  23. This is not necessarily the case, although it is safe for many common
  24. architectures.
  25.  
  26. The C Standard states that the value of the pointer after a call to free
  27. is 'indeterminate'.  This means that just reading the value might
  28. produce a runtime fault.
  29.  
  30. Imagine an architecture that uses a distinguished data type for pointers;
  31. the hardware can tell the difference between a pointer and an integer
  32. for example.  Furthermore, there are valid and invalid values for any
  33. data type, such as pointers, integers, floating-point.  Reading an invalid
  34. value causes a fault.  At program start, for example, all uninitialized
  35. variables are given an illegal value, so that attempts to use such
  36. values are detected as soon as they occur.  Such architectures do exist.
  37.  
  38. When data is freed, the memory could be removed from the program
  39. address space.  The pointer to the former data would now be invalid,
  40. and checked by the hardware on a reference.  Simply testing the value
  41. of the pointer after the call to free could thus cause a fault.
  42. -- 
  43.  
  44. Steve Clamage, TauMetric Corp, steve@taumet.com
  45. Vice Chair, ANSI C++ Committee, X3J16
  46.