Simple Question: Pointers and Uninitialized Variables Explained

  • Thread starter Thread starter yungman
  • Start date Start date
  • Tags Tags
    Pointers
Click For Summary
SUMMARY

The discussion clarifies the concept of pointers and uninitialized variables in C++. It emphasizes that declaring a pointer with int* p; does not allocate memory for an integer; it merely creates a pointer variable that can hold an address. The pointer remains uninitialized until it is assigned a valid memory address, either by referencing an existing variable or by allocating new memory using new. The correct usage of pointers is illustrated through examples, highlighting the importance of proper initialization to avoid undefined behavior.

PREREQUISITES
  • Understanding of C++ syntax and structure
  • Knowledge of pointers and memory management in C++
  • Familiarity with dynamic memory allocation using new
  • Basic understanding of variable initialization and scope
NEXT STEPS
  • Learn about C++ dynamic memory management with delete and memory leaks
  • Explore the use of smart pointers in C++11 for better memory management
  • Study the differences between stack and heap memory allocation
  • Investigate the implications of uninitialized variables in C++ and how to avoid them
USEFUL FOR

C++ developers, computer science students, and anyone interested in understanding memory management and pointer usage in C++ programming.

yungman
Messages
5,741
Reaction score
291
Why this doesn't work?
C++:
#include<iostream>
using namespace std;
int main()
{
    int* p;
    *p = 1;//error said uninitialized variable p used.
    count << *p << endl;
    return 0;
}

I know if I do this, it works:
C++:
#include <iostream>
using namespace std;

int main ()
{
    int* p;
    int x = 10;
    p = &x;
    count << *p << endl;

  return 0;
}
I thought when you declare a pointer int*p; you already allocate a memory for an integer pointed by p already.

Or int*p; only allocate memory for pointer p to store the address, that the address is not valid until using p = &x; to write the address of x into p?
Thanks
 
Last edited:
Technology news on Phys.org
yungman said:
Or int*p; only allocate memory for pointer p to store the address, that the address is not valid until using p = &x; to write the address of x into p?
Correct. Compare this to writing simply int x;. This says simply that x is a variable that is intended to contain an int. It doesn't store any particular value into x. At this point, x contains, in effect, a random bit pattern.

When you write simply int *p; this says that p is a variable that is intended to contain a pointer to an int. It doesn't store a particular value into p, that is, it doesn't make p point to any memory location in particular. At this point, p contains, in effect, a random bit pattern.
 
  • Like
Likes   Reactions: yungman
Thanks Jtbell, that clarified for me.
 
yungman said:
the address is not valid until using p = &x; to write the address of x into p?
That's one way to put a valid address into p. Another way, of course, is to allocate "new" memory explicitly. p = new int; allocates memory intended to hold an int and stores its address in p, but doesn't store any particular value in the newly-allocated memory, so in effect, *p gives you a random bit pattern.

To put something into the newly-allocated memory, you can initialize it when you allocate it: int *p = new int(x); declares p to be a pointer intended to point to an int, allocates an int-sized chunk of memory, and finally copies the value of x into the newly-allocated memory. Or you can initialize the new memory later: int *p = new int; *p = x;. Or you can separate all three steps: int *p; p = new int; *p = x;.
 

Similar threads

Replies
7
Views
4K
  • · Replies 13 ·
Replies
13
Views
3K
Replies
5
Views
2K
  • · Replies 23 ·
Replies
23
Views
2K
Replies
12
Views
2K
  • · Replies 17 ·
Replies
17
Views
3K
  • · Replies 15 ·
Replies
15
Views
4K
Replies
12
Views
3K
Replies
4
Views
2K
  • · Replies 118 ·
4
Replies
118
Views
10K