While optimizing my code, I noticed that I was calling malloc too frequently. Specifically, I was freeing a struct and then reallocating the same element, that in the struct that I free, with the same values.
It’s better to show it in code:
<code>#include <stdlib.h>
struct someStruct
{
int x, y, z;
float w;
};
struct node
{
struct node *prev, *next;
struct someStruct value;
};
struct someStruct* extract(struct node* old)
{
struct someStruct *value = (struct someStruct*)malloc(sizeof(struct someStruct));
*value = old->value;
free(old);
return value;
}
</code>
<code>#include <stdlib.h>
struct someStruct
{
int x, y, z;
float w;
};
struct node
{
struct node *prev, *next;
struct someStruct value;
};
struct someStruct* extract(struct node* old)
{
struct someStruct *value = (struct someStruct*)malloc(sizeof(struct someStruct));
*value = old->value;
free(old);
return value;
}
</code>
#include <stdlib.h>
struct someStruct
{
int x, y, z;
float w;
};
struct node
{
struct node *prev, *next;
struct someStruct value;
};
struct someStruct* extract(struct node* old)
{
struct someStruct *value = (struct someStruct*)malloc(sizeof(struct someStruct));
*value = old->value;
free(old);
return value;
}
I don’t want to use malloc in extract function.
I want to free only ‘prev & next’, like:
Memory Layout:
<code>Some_addr:
# prev
# next
# value
return_addr = extract(some_addr);
Some_addr:
# // made free (prev)
# // made free (next)
return_addr:
# value
</code>
<code>Some_addr:
# prev
# next
# value
return_addr = extract(some_addr);
Some_addr:
# // made free (prev)
# // made free (next)
return_addr:
# value
</code>
Some_addr:
# prev
# next
# value
return_addr = extract(some_addr);
Some_addr:
# // made free (prev)
# // made free (next)
return_addr:
# value
Note: I am using windows 64x