C Board  

Go Back   C Board > General Programming Boards > C Programming

Reply
 
LinkBack Thread Tools Display Modes
Old 09-21-2008, 10:13 AM   #1
Registered User
 
Join Date: Sep 2008
Posts: 58
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.
scarlet00014 is offline   Reply With Quote
Old 09-21-2008, 10:16 AM   #2
and the hat of vanishing
 
Salem's Avatar
 
Join Date: Aug 2001
Location: The edge of the known universe
Posts: 21,214
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.
__________________
If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
Up to 8Mb PlusNet broadband from only £5.99 a month!
Salem is offline   Reply With Quote
Old 09-21-2008, 10:20 AM   #3
and the Hat of Guessing
 
tabstop's Avatar
 
Join Date: Nov 2007
Posts: 8,740
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 */
tabstop is offline   Reply With Quote
Reply

Tags
beginner, malloc

Thread Tools
Display Modes

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
malloc + segmentation fault ch4 C Programming 5 04-07-2009 03:46 PM
the basics of malloc nakedBallerina C Programming 21 05-20-2008 02:32 AM
Is there a limit on the number of malloc calls ? krissy Windows Programming 3 03-19-2006 12:26 PM
Malloc and calloc problem!! xxhimanshu C Programming 19 08-10-2005 05:37 AM
malloc() & address allocation santechz C Programming 6 03-21-2005 09:08 AM


All times are GMT -6. The time now is 12:19 PM.


Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0 RC2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22