Skip to main content

Structures and Memory Allocation in C

Memory Allocation for Structures​

There are several ways to allocate memory for structures, depending on the specific requirements of your program.

Here are a few ways to allocate memory for structures in C:

Stack allocation​

If you know the size of the structure at compile time, you can allocate it on the stack using the declaration syntax.

For example:

#include <stdio.h>

// define a structure named 'person'
struct person
{
int income;
int age;
};

int main()
{
// declare a variable 'p' of type 'person',
// which allocates enough memory on
// the stack to hold the entire structure
struct person p;

// set the values of the 'name' and 'age'
// members of the 'p' variable
p.income = 10000;
p.age = 30;

// print out the income and age of the
//person using the 'printf' function
printf("Income: %d\n", p.income);
printf("Age: %d\n", p.age);

return 0;
}
Output:

Explanation

  • In this program, we define a person structure with two members: name and age.
  • We then declare a variable p of type person, which allocates enough memory on the stack to hold the entire structure.

Heap allocation​

If you don't know the size of the structure at compile time, you can allocate it on the heap using the malloc function.

For example:

#include <stdio.h>
#include <stdlib.h>

// define a structure named 'person'
struct person
{
char name[50];
int age;
};

int main()
{
// dynamically allocate memory on the heap
// for a 'person' structure, and
// assign a pointer to the structure to the 'p' variable
struct person *p = (struct person *)malloc(sizeof(struct person));

// check if the memory allocation was successful
if (p == NULL)
{
printf("Memory allocation failed\n");
return 1;
}

// set the values of the 'name' and 'age'
// members of the 'p' structure using
// the 'strcpy' and 'sprintf' functions
strcpy(p->name, "John Doe");
sprintf(&p->age, "%d", 30);

// print out the name and age of the person
// using the 'printf' function
printf("Name: %d\n", p->name);
printf("Age: %d\n", p->age);

// free the memory allocated for the 'p'
// structure using the 'free' function
free(p);

return 0;
}
Output:

Explanation

  • In this program, we define a person structure with two members: name and age.
  • We then dynamically allocate memory on the heap for a person structure using the malloc function, and assign a pointer to the structure to the p variable.

Struct initialization​

If you know the initial values of the structure members, you can initialize the structure using a struct initialization itself.

For example:

#include <stdio.h>

// define a structure named 'person'
struct person
{
char name[50];
int age;
};

int main()
{
// initialize a 'person' structure using a struct initializer
struct person p = {"John Doe", 30};

// print out the name and age of the person using the 'printf' function
printf("Name: %s\n", p.name);
printf("Age: %d\n", p.age);

return 0;
}
Output:

Explanation

  • In this program, we define a person structure with two members: name and age.
  • We then initialize a person structure using a struct initializer, which sets the name member to "John Doe" and the age member to 30.