Connecting Tech Pros Worldwide Forums | Help | Site Map

help generating an array of array with malloc or calloc

Eric Boutin
Guest
 
Posts: n/a
#1: Nov 13 '05
Hi ! I would like to generate an array of type char[n][5];

I just dont really figure out how I could do it with malloc or calloc.. I
mean.. I know how to allocate a simple array with both of them; but when it
comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char**
array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
anyone have an idea ?



pete
Guest
 
Posts: n/a
#2: Nov 13 '05

re: help generating an array of array with malloc or calloc


Eric Boutin wrote:[color=blue]
>
> Hi ! I would like to generate an array of type char[n][5];
>
> I just dont really figure out how I could do it with malloc or calloc.. I
> mean.. I know how to allocate a simple array with both of them; but when it
> comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char**
> array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
> anyone have an idea ?[/color]

Output from new.c:

array[0][0] is 0
array[0][1] is 1
array[0][2] is 2
array[0][3] is 3
array[0][4] is 4
array[1][0] is 10
array[1][1] is 11
array[1][2] is 12
array[1][3] is 13
array[1][4] is 14
array[2][0] is 20
array[2][1] is 21
array[2][2] is 22
array[2][3] is 23
array[2][4] is 24

/* BEGIN new.c */

#include <stdio.h>
#include <stdlib.h>

#define N 3

int main(void)
{
size_t n, a, b;
char (*array)[5];

n = N;
array = malloc(n * sizeof *array);
if (!array) {
fputs("I'm tired\n", stderr);
exit(EXIT_FAILURE);
}
puts("Output from new.c:\n");
for (a = 0; a != n; ++a) {
for (b = 0; b != 5; ++b)
array[a][b] = (char)(10 * a + b);
}
for (a = 0; a != n; ++a) {
for (b = 0; b != 5; ++b) {
printf("array[%u][%u] is %u\n",
(unsigned)a,
(unsigned)b,
(unsigned)array[a][b]);
}
}
return 0;
}

/* END new.c */
Nejat AYDIN
Guest
 
Posts: n/a
#3: Nov 13 '05

re: help generating an array of array with malloc or calloc


Eric Boutin wrote:[color=blue]
>
> Hi ! I would like to generate an array of type char[n][5];
>
> I just dont really figure out how I could do it with malloc or calloc.. I
> mean.. I know how to allocate a simple array with both of them; but when it
> comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char**
> array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
> anyone have an idea ?[/color]

Read the C FAQ, Question 6.16
http://www.eskimo.com/~scs/C-faq/q6.16.html
Joe Wright
Guest
 
Posts: n/a
#4: Nov 13 '05

re: help generating an array of array with malloc or calloc


Eric Boutin wrote:[color=blue]
>
> Hi ! I would like to generate an array of type char[n][5];
>
> I just dont really figure out how I could do it with malloc or calloc.. I
> mean.. I know how to allocate a simple array with both of them; but when it
> comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for char**
> array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
> anyone have an idea ?[/color]

You clearly need a better C book. K&R2 comes to mind. Chapter 5
pertains. There is also Steve Summit's C FAQ. Section 6 pertains. Read
more.
--
Joe Wright http://www.jw-wright.com
"Everything should be made as simple as possible, but not simpler."
--- Albert Einstein ---
Eric Boutin
Guest
 
Posts: n/a
#5: Nov 13 '05

re: help generating an array of array with malloc or calloc


sorry I didn't read this point in the FAQ..

sorry

"Nejat AYDIN" <nejataydin@superonline.com> a écrit dans le message de
news:3FC9FFA3.65BA405C@superonline.com...[color=blue]
> Eric Boutin wrote:[color=green]
> >
> > Hi ! I would like to generate an array of type char[n][5];
> >
> > I just dont really figure out how I could do it with malloc or calloc..[/color][/color]
I[color=blue][color=green]
> > mean.. I know how to allocate a simple array with both of them; but[/color][/color]
when it[color=blue][color=green]
> > comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for[/color][/color]
char**[color=blue][color=green]
> > array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
> > anyone have an idea ?[/color]
>
> Read the C FAQ, Question 6.16
> http://www.eskimo.com/~scs/C-faq/q6.16.html[/color]


Eric Boutin
Guest
 
Posts: n/a
#6: Nov 13 '05

re: help generating an array of array with malloc or calloc


Thanks !

"pete" <pfiland@mindspring.com> a écrit dans le message de
news:3FC9FE88.D2D@mindspring.com...[color=blue]
> Eric Boutin wrote:[color=green]
> >
> > Hi ! I would like to generate an array of type char[n][5];
> >
> > I just dont really figure out how I could do it with malloc or calloc..[/color][/color]
I[color=blue][color=green]
> > mean.. I know how to allocate a simple array with both of them; but[/color][/color]
when it[color=blue][color=green]
> > comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for[/color][/color]
char**[color=blue][color=green]
> > array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
> > anyone have an idea ?[/color]
>
> Output from new.c:
>
> array[0][0] is 0
> array[0][1] is 1
> array[0][2] is 2
> array[0][3] is 3
> array[0][4] is 4
> array[1][0] is 10
> array[1][1] is 11
> array[1][2] is 12
> array[1][3] is 13
> array[1][4] is 14
> array[2][0] is 20
> array[2][1] is 21
> array[2][2] is 22
> array[2][3] is 23
> array[2][4] is 24
>
> /* BEGIN new.c */
>
> #include <stdio.h>
> #include <stdlib.h>
>
> #define N 3
>
> int main(void)
> {
> size_t n, a, b;
> char (*array)[5];
>
> n = N;
> array = malloc(n * sizeof *array);
> if (!array) {
> fputs("I'm tired\n", stderr);
> exit(EXIT_FAILURE);
> }
> puts("Output from new.c:\n");
> for (a = 0; a != n; ++a) {
> for (b = 0; b != 5; ++b)
> array[a][b] = (char)(10 * a + b);
> }
> for (a = 0; a != n; ++a) {
> for (b = 0; b != 5; ++b) {
> printf("array[%u][%u] is %u\n",
> (unsigned)a,
> (unsigned)b,
> (unsigned)array[a][b]);
> }
> }
> return 0;
> }
>
> /* END new.c */[/color]


Eric Boutin
Guest
 
Posts: n/a
#7: Nov 13 '05

re: help generating an array of array with malloc or calloc


Thanks for book suggestion

"Joe Wright" <joewwright@earthlink.net> a écrit dans le message de
news:3FCA1593.5BD@earthlink.net...[color=blue]
> Eric Boutin wrote:[color=green]
> >
> > Hi ! I would like to generate an array of type char[n][5];
> >
> > I just dont really figure out how I could do it with malloc or calloc..[/color][/color]
I[color=blue][color=green]
> > mean.. I know how to allocate a simple array with both of them; but[/color][/color]
when it[color=blue][color=green]
> > comes to a 2 dimension array.. I'm stuck.. I mean.. if I ask for[/color][/color]
char**[color=blue][color=green]
> > array = malloc(5*n*sizeof(char));, it'll return a void*, not a void**..
> > anyone have an idea ?[/color]
>
> You clearly need a better C book. K&R2 comes to mind. Chapter 5
> pertains. There is also Steve Summit's C FAQ. Section 6 pertains. Read
> more.
> --
> Joe Wright http://www.jw-wright.com
> "Everything should be made as simple as possible, but not simpler."
> --- Albert Einstein ---[/color]


pete
Guest
 
Posts: n/a
#8: Nov 13 '05

re: help generating an array of array with malloc or calloc


Eric Boutin wrote:[color=blue]
>
> Thanks ![/color]

You're welcome.
[color=blue]
> "pete" <pfiland@mindspring.com> a écrit dans le message de
> news:3FC9FE88.D2D@mindspring.com...[color=green]
> > Eric Boutin wrote:[color=darkred]
> > >
> > > Hi ! I would like to generate an array of type char[n][5];
> > >
> > > I just dont really figure out how
> > > I could do it with malloc or calloc..[/color][/color][/color]
[color=blue][color=green]
> > array = malloc(n * sizeof *array);[/color][/color]

The way that this particular program was written,
it wasn't necessary to free(array),
but I believe that it's good to be in the habit of freeing
whatever is allocated, and I forgot to do that.
[color=blue]
>[color=green]
> > }[/color][/color]

free(array);
[color=blue][color=green]
> > return 0;
> > }
> >
> > /* END new.c */[/color][/color]


--
pete
Closed Thread