9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
From: Axel Belinfante <Axel.Belinfante@cs.utwente.nl>
To: Fans of the OS Plan 9 from Bell Labs <9fans@cse.psu.edu>
Subject: Re: [9fans] memory woes
Date: Fri,  5 Jan 2007 15:53:02 +0100	[thread overview]
Message-ID: <200701051453.l05Er2t16842@zamenhof.cs.utwente.nl> (raw)
In-Reply-To: Your message of "Fri, 05 Jan 2007 15:36:32 +0100." <329de470156ae34054ae5f9314a37c49@mail.gmx.net>

as Erik wrote you need to allocate one more byte: for the '\0'
at the end of the string.

regarding the crashing and presence/absence of free's:

if I'm not mistaken the blocks returned by malloc are
slightly bigger than the size you requested; at the end
(beyond the requested size) they contain a special bit
pattern that gets overwritten when you try to stuff to
much data in the block.
when a block is returned to the allocator (as done by free)
the special zone bitpattern is checked to catch this
kind of errors, and reported exactly as you see here.

somewhere in the 9fans archive there should be a message
that describes the details of the error message,
see also malloc(2)

Axel.

> I got this code:
> #include <u.h>
> #include <libc.h>
>
>
> void main(int argc, char **argv) {
> 	int i;
> 	char *m00;
>
> 	for(i=0; i<=5; i++) {
> 		if((m00 = malloc(strlen("Hello World"))) == nil) {
> 			print("drama! [%d]\n",i);
> 			exits("malloc");
> 		}
> 		strcpy(m00,"Hello World");
> 		print("%d> %s\n",i,m00);
> 		free(m00);
> 	}
> 	exits(nil);
> }
>
> If I run that, I get:
> term% 8c foo.c && 8l foo.8
> term% 8.out
> 0> Hello World
> mem user overflow
> pool sbrkmem block a460
> hdr 0a110c09 00000040 0000104f 00000000 6c6c6548 6f57206f
> tail 00000000 00000000 00000000 00000000 00000000 00000000 | ef2d00be 0000004
> 0
> user data 6c 6f 20 57  6f 72 6c 64 | 00 fe f1 f0  00 00 00 00
> panic: pool panic
> 8.out 1430: suicide: sys: trap: fault read addr=0x0 pc=0x0000324a
> term%
>
>
> Without the free()-call in the loop, it does not crash - why is that? Also, I
>  see programs just get killed without any warning/error-message anywhere - co
> mmenting out random free() calls seem to help ^^
>
> Can somebody explain what is going on?
>
>
> Mfg, Sascha


  parent reply	other threads:[~2007-01-05 14:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-05 14:36 sretzki
2007-01-05 14:44 ` erik quanstrom
2007-01-05 14:51   ` sretzki
2007-01-05 14:53 ` Axel Belinfante [this message]
2007-01-05 14:54 erik quanstrom

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200701051453.l05Er2t16842@zamenhof.cs.utwente.nl \
    --to=axel.belinfante@cs.utwente.nl \
    --cc=9fans@cse.psu.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).