Message-ID: <3B837177.F0C4C3C2@acm.org> From: Eric Sosman X-Mailer: Mozilla 4.72 [en] (Win95; U) X-Accept-Language: en MIME-Version: 1.0 Newsgroups: comp.os.msdos.djgpp Subject: Re: exit( ) versus return 0; and abort References: <3B88F7B3 AT MailAndNews DOT com> <200108211928 DOT PAA07064 AT envy DOT delorie DOT com> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Lines: 20 Date: Wed, 22 Aug 2001 13:41:54 GMT NNTP-Posting-Host: 12.91.3.190 X-Complaints-To: abuse AT worldnet DOT att DOT net X-Trace: bgtnsc04-news.ops.worldnet.att.net 998487714 12.91.3.190 (Wed, 22 Aug 2001 13:41:54 GMT) NNTP-Posting-Date: Wed, 22 Aug 2001 13:41:54 GMT Organization: AT&T Worldnet To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com DJ Delorie wrote: > > A return from main is exactly the same as calling exit with the same > value. [...] There is a slight difference: returning from main() discards any `auto' variables it may have. This will be a problem if the end-of-run cleanup activities try to refer to these no-longer-existing data objects. How can it happen that post-program cleanup tries to use main()'s `auto' variables? One way is by registering functions with atexit() and having them use pointers to variables which happen to be local to main(). A slightly subtler problem is using setvbuf() to cause some I/O stream to use a stack-resident buffer in main(); if this stream is still open when main() returns there may be Hell to pay. -- Eric Sosman esosman AT acm DOT org