#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.