Storage Allocation
When we declare a pointer in C, a certain amount of space is allocated for it, just as for other types of variables. Pointers generally occupy one machine word, but their size can vary. Therefore, for portability, we should never assume that a pointer has a specific size. Pointers often vary in size as a result of compiler settings and type specifiers allowed by certain C implementations. It is also important to remember that when we declare a pointer, space is allocated only for the pointer itself; no space is allocated for the data the pointer references. Storage for the data is allocated in one of two ways: by declaring a variable for it or by allocating storage dynamically at runtime (using malloc or realloc, for example).
When we declare a variable, its type tells the compiler how much
storage to set aside for it as the program runs. Storage for the
variable is allocated automatically, but it may not be persistent
throughout the life of the program. This is especially important to
remember when dealing with pointers to automatic
variables. Automatic variables are those for which storage is allocated and
deallocated automatically when entering and leaving a block or
function. For example, since iptr
is set to
the address of the automatic variable a
in
the following function f,
iptr
becomes a dangling pointer when
f returns. This situation occurs because once
f returns, a
is no
longer valid on the program stack (see Chapter 3).
int f(int **iptr) { int a = 10; ...
Get Mastering Algorithms with C now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.