Suppose I want to define a structure representing length of the vector and its values as:
struct Vector{
double* x;
int n;
};
Now,
Few points
struct Vector y = (struct Vector*)malloc(sizeof(struct Vector));
is wrong
it should be struct Vector *y = (struct Vector*)malloc(sizeof(struct Vector));
since y
holds pointer to struct Vector
.
1st malloc()
only allocates memory enough to hold Vector structure (which is pointer to double + int)
2nd malloc()
actually allocate memory to hold 10 double.
When you allocate memory for struct Vector
you just allocate memory for pointer x
, i.e. for space, where its value, which contains address, will be placed. So such way you do not allocate memory for the block, on which y.x
will reference.