> Chris Costello wrote:
> > On Wednesday, August 02, 2000, [EMAIL PROTECTED] 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:[EMAIL PROTECTED]/
http://links.ru/
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message