Link to home
Start Free TrialLog in
Avatar of larockd
larockd

asked on

Pointers - passing to functions

I am trying to pass pointers to and from a function.  I have accomplished what I wanted to do, but I think I might have a potential problem.

In My Main Function I created a pointer to type int.  This pointer is going to point to several integer values obtained from function GetChainWheelSizes.

The two variables declared in main are going to be used throughout the entire program in several functions.  

Question : In My function I declare a pointer and allocate memory for it to point at.  When this function is done, I return the pointer.  When I free the memory at the end of the program am I freeing the memory that I allocated in the function since I returned the pointer???

Question : Since I have to use iNumberChainWheels and pChainWheelSizes throughout the program is there a better way to do this??


int main()
 {
 
   int* pChainWheelSizes = NULL ;   // pointer to point to several integers
   int iNumberChainWheels = 0 ;       // gets user input of how many ints stored in pointer

   pChainWheelSizes = GetChainWheelSizes( &iNumberChainWheels );

// Test To See Whats In  pChainWheelSizes

   printf("\nAfter Function Call");
   for ( iLoopVariable = 0 ; iLoopVariable < iNumberChainWheels ; iLoopVariable++ )
   {
      printf("%d ", pChainWheelSizes[iLoopVariable]) ;
    }

 free( pChainWheelSizes );    // is this really freeing the memory allocated in the function?

return 0 ;

}


/*  This function takes iNumberChainWheels whihc is zero.  I only pass it as a pointer so I can use this variable throughout the rest of the program.  I am returning a pointer that holds all the integers entered by the user. */

int * GetChainWheelSizes( int* iNumberChainWheels )
{

 int iLoopVariable = 0 ;
 int *pChainWheelSizes ;
 

   printf("\nNumber Of Chainwheels: ");
   scanf("%d", iNumberChainWheels);
 
   if ( *iNumberChainWheels == 0 )
  return 0;

 if ( ( pChainWheelSizes = (int *) malloc ( sizeof( int ) * (*iNumberChainWheels)) ) == NULL )
 {
  printf(" \n Unable To Allocate Memory For Chain Wheels.");
  return 0;
 }

 printf("\nPlease Provide Chainwheel sizes in ascending order: ");
   
 for ( iLoopVariable = 0 ; iLoopVariable < *iNumberChainWheels ; iLoopVariable++ )
 {
        printf("\nPlease Provide Chainwheel sizes #%d : ", iLoopVariable + 1);
  scanf("%d", &pChainWheelSizes[iLoopVariable]) ;
 }



 // Test To See Whats In  pChainWheelSizes
    for ( iLoopVariable = 0 ; iLoopVariable < *iNumberChainWheels ; iLoopVariable++ )
 {
  printf("%d ", pChainWheelSizes[iLoopVariable]) ;
 }

    return ( pChainWheelSizes ) ;  

}
ASKER CERTIFIED SOLUTION
Avatar of bobbym
bobbym

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of bobbym
bobbym

Ooooppps a small bug in the destructor :)) should be !=
>> Question : Since I have to use iNumberChainWheels
>> and pChainWheelSizes throughout the program is there
>> a better way to do this??
Beginners are often discouraged from using global variables because there is a big temptation to use them inappropriately.  This leads to incomprehensible code, nasty bugs, and program designs that can't be expanded on in many ways.  However, there are times when globals are appropriate.  This might be one.  You should make these global variables and then not pass them as parameters/return values, if the following is true

a)  The program needs only one copy of these values.
b)  The values are needed in many different procedures in the program.  
c)  The values have a significance that is global to the the program.  That is, they tend to affect the way the program works overall, not just one part of it.
Avatar of larockd

ASKER

Thanks Bobby, and Nietod