For the sake of completeness of my previous comment, an example is
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool mem_allocate (double *vars[], size_t N_vars, size_t newWidth)
{
double *temp;
printf("\n");
for (size_t i=0; i<N_vars; i++)
{
temp = realloc(vars[i], newWidth*sizeof(*temp));
if (temp != NULL)
{
printf ("temp: %p\n", (void *)temp);
vars[i] = temp;
}
else
{
return false;
}
}
printf("\n");
return true;
}
int main (void)
{
double *var1 = malloc(sizeof(*var1));
double *var2 = malloc(sizeof(*var2));
double *var3 = malloc(sizeof(*var3));
double *var4 = malloc(sizeof(*var4));
printf ("var1: %p\n", (void *)var1);
printf ("var2: %p\n", (void *)var2);
printf ("var3: %p\n", (void *)var3);
printf ("var4: %p\n", (void *)var4);
double *vars[4];
vars[0] = var1;
vars[1] = var2;
vars[2] = var3;
vars[3] = var4;
if (mem_allocate (vars, sizeof(vars)/sizeof(vars[0]), 200) == true)
{
var1 = vars[0];
var2 = vars[1];
var3 = vars[2];
var4 = vars[3];
printf ("var1: %p\n", (void *)var1);
printf ("var2: %p\n", (void *)var2);
printf ("var3: %p\n", (void *)var3);
printf ("var4: %p\n", (void *)var4);
}
return 0;
}
Changing varx
inside function mem_allocate would imply 3 star implementation, that I really don't love.
Obviously all malloc
return value must be checked.