JackV
JackV

Reputation: 218

Returning a pointer from a function to main

Writing a program to find the address of the largest element in an array with 10 integers my code is:

int* Largest(int *array, int size);
int main()
{
   int *Ptr, array[10];
   int r, c, num = 1;
   for(r = 0; r < 10; r++) {
       array[r] = num + 1;
   }

   Ptr = Largest(array, 10);
   printf("%p", Ptr);
   return 0;
}

int* Largest(int *array, int size)
{
    int *largest, r;
    for(r = 0; r < size; r++) {
       if(r = 0) {
          largest = &array[0];
       }
       else {
           if(array[r] > *largest) {
               largest = &array[r];
           }
       }
    }
    return largest;
}

I dont get any errors or warning when compiling however the program does not do anything and gets stopped automatically by windows.

Upvotes: 0

Views: 55

Answers (2)

Harish
Harish

Reputation: 23

when the control back from largest() then stack frame of is now clear in memory. then system looking for ptr containing address but it cannot find anything, so system terminate this program

Upvotes: -1

Iharob Al Asimi
Iharob Al Asimi

Reputation: 53016

  1. You probably didn't include headers you need at least stdio.h

  2. You have an assignment which very likely shouldn't be

    if(r = 0)
    

    I think this should be

    if (r == 0)
    

    I have seen that some people prevent this kind of problem by doing

    if (0 == r)
    

    since this way the program will fail to compile if you use the = operator, and anyway this is not a very good way of doing this, instead you should

    larget = &array[0];
    for (r = 1 ; r < size ; ++r)
    

    and this will be more efficient obviously.

As for the program stopping, you can try to run the cmd.exe window and execute your program directly from there.

Note: if (condition1) {} else if (condition2) {} is valid in c, no need for if (condition1) {} else {if (condition2) {}}.

Upvotes: 2

Related Questions