Skip site navigation (1)Skip section navigation (2)
Date:      9 Apr 2011 14:43:36 -0000
From:      "John Levine" <johnl@iecc.com>
To:        freebsd-questions@freebsd.org
Cc:        kerolasa@gmail.com
Subject:   Re: malloc: errno: 22: Invalid argument
Message-ID:  <20110409144336.72626.qmail@joyce.lan>
In-Reply-To: <BANLkTikEZHkQhLYz9-gEGfJnSoDWSAKFxA@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
>-- snip
>#include <err.h>
>#include <errno.h>
>#include <stdlib.h>
>
>int main(void)
>{
>        int *i;
>        warn("errno: %d", errno);
>        i = malloc(sizeof(int));
>        warn("errno: %d", errno);
>        free(i);
>        return (errno);
>}
>-- snip

Your code is wrong.  There's only a useful value in errno after
something fails.  This would be more reasonable:

int main(void)
{
        int *i;
        /* warn("errno: %d", errno); -- no error, nothing to check */
        i = malloc(sizeof(int));
        if(!i)warn("errno: %d", errno); /* only warn on failure */
        free(i);    /* -- free ignores NULL argument */
        return (0); /* -- free cannot fail, no meaningful errno */
}

This isn't specific to FreeBSD, by the way.  It's ANSI C.

Regards,
John Levine, johnl@iecc.com, Primary Perpetrator of "The Internet for Dummies",
Please consider the environment before reading this e-mail. http://jl.ly



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20110409144336.72626.qmail>