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
next prev 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).