From owner-freebsd-questions@FreeBSD.ORG Sat Sep 20 08:21:52 2008 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 010011065671 for ; Sat, 20 Sep 2008 08:21:52 +0000 (UTC) (envelope-from keramida@ceid.upatras.gr) Received: from igloo.linux.gr (igloo.linux.gr [62.1.205.36]) by mx1.freebsd.org (Postfix) with ESMTP id 6C9948FC18 for ; Sat, 20 Sep 2008 08:21:51 +0000 (UTC) (envelope-from keramida@ceid.upatras.gr) Received: from kobe.laptop (adsl83-215.kln.forthnet.gr [77.49.50.215]) (authenticated bits=128) by igloo.linux.gr (8.14.3/8.14.3/Debian-5) with ESMTP id m8K8LbYp030086 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Sat, 20 Sep 2008 11:21:42 +0300 Received: from kobe.laptop (kobe.laptop [127.0.0.1]) by kobe.laptop (8.14.3/8.14.3) with ESMTP id m8K8LatC073612; Sat, 20 Sep 2008 11:21:36 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) Received: (from keramida@localhost) by kobe.laptop (8.14.3/8.14.3/Submit) id m8K8LYRv073611; Sat, 20 Sep 2008 11:21:34 +0300 (EEST) (envelope-from keramida@ceid.upatras.gr) From: Giorgos Keramidas To: unga888@yahoo.com References: <260951.294.qm@web57003.mail.re3.yahoo.com> Date: Sat, 20 Sep 2008 11:21:34 +0300 In-Reply-To: <260951.294.qm@web57003.mail.re3.yahoo.com> (Unga's message of "Sat, 20 Sep 2008 00:31:41 -0700 (PDT)") Message-ID: <87bpyj9qi9.fsf@kobe.laptop> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-MailScanner-ID: m8K8LbYp030086 X-Hellug-MailScanner: Found to be clean X-Hellug-MailScanner-SpamCheck: not spam, SpamAssassin (not cached, score=-3.851, required 5, autolearn=not spam, ALL_TRUSTED -1.80, AWL 0.55, BAYES_00 -2.60) X-Hellug-MailScanner-From: keramida@ceid.upatras.gr X-Spam-Status: No Cc: freebsd-questions@freebsd.org Subject: Re: Segmentation fault when free X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Sep 2008 08:21:52 -0000 On Sat, 20 Sep 2008 00:31:41 -0700 (PDT), Unga wrote: > --- On Sat, 9/20/08, Giorgos Keramidas wrote: >> You are probably calling free() multiple times for the same buffer. >> >> Try tracing the malloc and free calls, using the information from >> this message: >> >> http://lists.freebsd.org/pipermail/freebsd-questions/2008-July/179480.html > > Hi Giorgos, thank you very much for your reply. You are welcome :) > ktrace.out shows: > malloc_init() > 0x8103400 = malloc(1024) > malloc_init() > malloc_init() > 0x810b0b0 = malloc(400) > : > so many malloc > : > so many free > : > malloc/free combinations > : > free(0xbfbfc9c9) > > 1. This clearly shows my program is trying to free a memory that has > not been allocated. How it could have happened? Aha. This looks remarkably like an address in the runtime stack. It usually happens when you have a function that returns the address of a 'local' variable, instead of a newly allocated heap area, i.e.: char * function(void) { char buffer[100]; return buf; } > 2. Is it correct to have many malloc_init()? Yes, that's ok. If your program is threaded, FreeBSD's pthread implementation calls malloc(3) and malloc_init() takes special care of initializing the internal malloc state only one time.