1. ## Malloc() help?

I have to read in a huge array of numbers from a file as if it were stdin.

The first two numbers in the file are the array dimensions. Then the numbers in the array are below.

Like this:
244 456
33 56 43 7 97 336 56
323 789 64 569 4
...
and so on.

I am able to read in the numbers and print them out just fine.
I am also able to print out the array horizontally and vertically with this code:

Horizontal:
Code:
```array[x][y];
for (i=0; i<y; i++){
for(j=x-1; j>=0; j--){
printf("%d\n", array[j][i]);
}

j=x-1;
}```
Vertical:
Code:
```    for (i=y-1; i>=0; i--){
for(j=0; j<x; j++){
printf("%d\n", array[j][i]);
}

j=0;
}```

However, this is for school and they want me to do it another way.

For the horizontal part, they want us to malloc() a row's worth of pixels.
Im guessing is this how you do it?
Code:
```
int **row;
row = (int **) malloc(sizeof(int *)*x);```
Then I probably read in each number of that row, and immediately print it out backwards in the same loop right? I dont know how to even read in something from malloc so .. can someone please help?

For the vertical part, I need to allocate an array of row (int *)'s. Then initialize each one of those (int *)'s by calling malloc() to allocate an array of column ints. Read each row of pixels into one of these arrays, and then print them out backwards.
Is this done like this?
Code:
```  int **col;
col = (int **) malloc(sizeof(int *)*x);
for (i = 0; i < x; i++) {
col[i] = (int *) malloc(sizeof(int)*y);
}```
If not can someone correct me please.. Im really lost when it comes to malloc.

2. Aside from casting the result of malloc, see the FAQ, it looks good.

Everything else in the code (like your array usage) should be the same as it is now.

3. If you need to store let's say 400 ints, then you would need to acquire enough memory to store 400 ints:
Code:
`int *holder_of_ints = malloc(400 * sizeof(int))`
Now you can access the memory as though holder_of_ints was an array, by using [index] notation.

If you need to store let's say a 300 x 400 grid, you would need 300 of the above, so:
Code:
```int **holder_of_2d_ints = malloc(300 * sizeof(int *));
for (int i = 0; i < 300; i++)
holder_of_2d_ints[i] = malloc(400 * sizeof(int)); /* just like above */```