This c code that demonstrates pass by values and pass by references in C doesn't work right

73 Views Asked by At
#include <stdio.h>

void passbyvalue(int number);
void passbyreference(int* pNumber);

void passbyreference1(int** pNumber);


int main(int argc, char* argv[])
{
    int number = 5;
    int* pNumber = &number;

    printf("pNumber in main is %p\n", pNumber);
    printf("*pNumber in main is %d\n", *pNumber);


    printf("number in main is %d\n", number);
    passbyvalue(number);
    printf("number in main is %d\n", number);

    passbyreference(&number);
    printf("number in main is %d\n", number);

    printf("*pNumber in main is %d\n", *pNumber);
    passbyreference1(&pNumber);
    printf("number in main is %d\n", *pNumber);

    // we should free the memory allocated in passbyreference1 once we are done
    // but we have to be careful
    printf("pNumber in main is now %p\n", pNumber);
    printf("freeing pNumber\n");
    free(pNumber);
    pNumber = NULL;
    printf("pNumber in main is now %p\n", pNumber);

    return 0;
}

void passbyvalue(int number)
{
    printf("number in passbyvalue is %d\n", number);
    number = 99;
    printf("number in passbyvalue is %d\n", number);
}

void passbyreference(int* pNumber)
{
    printf("number in passbyreference is %d\n", *pNumber);
    *pNumber = 99;
    printf("number in passbyreference is %d\n", *pNumber);

}

void passbyreference1(int** pNumber)
{
    printf("passbyreference1 can modify the pointer \n");
    // should check for NULL - also this creates a memory leak unless we call free
    int* pN = malloc(sizeof(int));

    printf("pN in passbyreference1 is %p\n", pN);

    *pN = 234;
    printf("*pN in passbyreference1 is %d\n", *pN);
    
    // this sets the pointer to the new int we created on the heap
    *pNumber = pN;
}

I'm trying to understand pointers to a pointer. This code is supposed to demonstrate pass by values and pass by reference. Everything seems to run correctly and I understand everything until I get to the passbyreference1 function. I run the code and I am getting a memory access violation error when the debugger tries to run the line *pN=234.

Tried checking malloc if it is NULL and that wasn't it. Also tried casting malloc to an int* and that didn't work.

0

There are 0 best solutions below