From: Gavin Sinclair Newsgroups: comp.os.msdos.djgpp Subject: Problems with malloc/new Date: Sat, 27 Sep 1997 17:05:55 +1100 Organization: University of New South Wales Lines: 47 Message-ID: <342CA243.7035@must.die> Reply-To: spammers AT must DOT die NNTP-Posting-Host: max314092.servers.unsw.edu.au Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk I have been having trouble with malloc and new, and I was wondering if there is anything obvious I might be doing wrong. I am using DJGPP 2.01 and programming in C++. With malloc, I was finding that it SOMETIMES fails. That is, I'd run the exact same executable several times in a row, and about half the time my debugging apparatus (printing to a file) would post-humously report that the pointer I had tried to allocate was 0. Giving up, I used new instead, and now, again about half the time, the entire program fails, saying "Virtual memory exceeded by 'new'". At least with malloc the program ran! (With only one side-effect, too). To make my description more concrete, I'll provide the key code. Baddie **badDude = (Baddie **)malloc(total * sizeof(Baddie *)); OR -- Baddie **badDude = new (Baddie *)[total]; FOLLOWED BY ----------- for (int i = 0; i < total; i++) badDude[i] = new Baddie(); (of course, all memory is 'free'd or 'delete'd in the destructor. What is _really_ strange is that, in the case of malloc failing, the last piece of code above (the for loop) still works. How can you reference an offset from a NULL pointer? Does any of this sound familiar??? -- Gavin Sinclair Sydney, Australia Real mail address is s2174215 AT cse DOT unsw DOT edu DOT au