Define an init_struct function, and call it religiously for every new_struct you allocate. It might look like this:
void init_struct(struct new_struct *nsp)
{
nsp->stage = 1;
}
If you allocate an ordinary new_struct variable, initialize it by calling init_struct, passing a pointer to it:
struct new_struct ns;
init_struct(&ns);
If you call malloc to get a pointer to memory for a brand-new new_struct, pass that pointer to init_struct:
struct new_struct *p = malloc(sizeof(struct new_struct));
if(p != NULL) init_struct(p);
The init_struct function I've shown only initializes the stage member, since that's what you said you were worried about. Usually it's also a good idea to make sure that everything in the structure is cleanly initialized to zero, which you can do by adding a call to memset:
void init_struct(struct new_struct *nsp)
{
memset(nsp, 0, sizeof(*nsp));
nsp->stage = 1;
}
(Theoretically that memset call might not be adequate for allocating structure members of pointer or floating-point types, but this is a rather esoteric concern, and on any machine you're likely to use today, the memset call will be sufficient.)