Теперь прочитав ваше обновление в комментариях, ваш модуль (, а не , называемый main ()), который выделяет и возвращает память, в порядке.
Какой бы модуль ни использовал значение, возвращаемое вашим модулем, он должен освобождать данные после использования. Так что если вы реализуете свой модуль как
sample mymodule(void)
{
sample foo = malloc(10);
/* set up contents of foo as required */
return foo;
}
Тогда вызывающая сторона mymodule будет выглядеть так:
int main (int argc, char *argv[])
{
sample bar = mymodule();
/* use contents of bar as required */
free(bar);
return 0;
}