Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 2 Aug 2000 23:13:05 +0400 (MSD)
From:      .@babolo.ru
To:        "Daniel C. Sobral" <dcs@newsguy.com>
Cc:        chris@calldei.com, freebsd-hackers@FreeBSD.ORG
Subject:   Re: malloc to arrays?
Message-ID:  <200008021913.XAA00739@cicuta.babolo.ru>
In-Reply-To: <39879ECA.61855D9D@newsguy.com> from "Daniel C. Sobral" at "Aug 2, 2000 01:08:42 pm"

next in thread | previous in thread | raw e-mail | index | archive | help
> Chris Costello wrote:
> > On Wednesday, August 02, 2000, .@babolo.ru wrote:
> > > Sorry I have no other direction to ask this:
> > > I have declaration:
> > >
> > > u_int32_t *(tcpcash_addr[256]);
> > >
> > > and want malloc some memory for tcpcash_addr:
> > >
> > > tcpcash_addr = (typeof(tcpcash_addr))malloc(u_int32_t * 256 * n);
> > >
> > > and have an error:
> > >
> > > ra-sum.c:386: cast specifies array type
> > > *** Error code 1
> > 
> >    Try this:
> > 
> >    u_int32_t *tcphash_haddr;
> >    tcphash_addr = malloc(sizeof(*tcphash_addr) * 256);
> > 
> >    You shouldn't be casting malloc and I don't see any reason
> > to use *(foo[nmemb]) syntax.
> 
> u_int32_t **tcphash_haddr;
> 
> From the code, it's a variable-sized array of fixed-sized arrays.
Yes, and whan I use u_int32_t *(tcpcash_addr[256]) declaration,
I can use tcpcash_addr[x][y], and I must use
tcpcash_addr[x * 256 + y] if declaration is u_int32_t *tcphash_haddr,
I cant use if u_int32_t **tcphash_haddr,
because of need of array of pointers in addition to array of arrays,
and the only clean but not nice way I know is
struct tcphash_haddr {u_int32_t tcpcash_addr[256];};
struct tcphash_haddr *tcphash_haddr;
but tcphash_haddr[x].tcpcash_addr[y] is not so clear
as tcpcash_addr[x][y]...

Is the reason to use *(foo[nmemb]) syntax clear enough?

And more, in the original code not malloc but mmap...

tcpcash_addr = (typeof(tcpcash_addr))mmap( NULL, ...

so using of pointers is dirty enougth.
and more, assign without a cast impossible:

ra-sum.c:385: incompatible types in assignment

And even

u_int32_t *(tcpcash_addr[256]);
tcpcash_addr = (void*)mmap( NULL, ...

does not translated

-- 
Александр А. Бабайлов                  mailto://babolo@links.ru/
                                           http://links.ru/



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




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