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>
