There are many objects defined throughout the library as structures of
varying and possibly large sizes. Due to the inefficiency of passing structures
by value (copying the whole structure to a function), structures are generally
passed to functions by reference. Because of this, there is always a potential
to pass an invalid pointer to a function which expects a pointer to a structure.
The following examples illustrate the right and wrong ways to use such a
function. Given a structure and a library function which initializes it,
typedef struct
{
int a, b, c, d;
} big_struct;
void initialize( struct big_struct *s )
{
s->a = 1; s->b = 2; s->c = 3; s->d = 4;
}the incorrect method of using this function is:
int main()
{
big_struct *s;
initialize( s ); /* WRONG */
}because the variable s is an uninitialized pointer. The correct method is to define a structure variable,
not a pointer to a structure, and pass a pointer to the structure:
int main()
{
big_struct s;
initialize( &s );
}Alternately, the incorrect example above could have been corrected by allocating the s pointer
before calling initialize.
No comments:
Post a Comment