Я работаю над созданием библиотеки потоков и по какой-то причине столкнулся с простой проблемой malloc, которую я не могу исправить прямо сейчас. Я уверен, что это просто, я просто пропустил его.Malloc Typedef Struct Problems
В моей main.c У меня есть следующий код:
//declare testSem
tasem_t testSem;
int main(int argc, char **argv){
ta_libinit();
//initialize testSem
ta_sem_init(&testSem, 5);
//wait test
ta_sem_wait(&testSem);
соответствующий код в моей библиотеке резьбы следующим образом:
void ta_sem_init(tasem_t *sema, int value)
{
//malloc the semaphore struct
sema = malloc(sizeof(tasem_t));
//error check
if(sema == NULL)
{
printf("could not malloc semaphore");
exit(0);
}
//initialize with the given value
sema->val = value;
printf("SemaVal = %i\n", sema->val);
}
void ta_sem_wait(tasem_t *sema)
{
printf("SemaVal = %i\n", sema->val);
if(sema->val <= 0)
{
//not done yet
printf("SWAPPING\n");
}
else
{
printf("SemaVal = %i\n", sema->val);
sema->val = sema->val + 1;
}
}
Вот структура из моего заголовка файла:
//struct to store each semas info
typedef struct tasem_t_struct
{
//value
int val;
//Q* Queue
//int numThreads
}tasem_t;
выход я получаю от этого:
SemaVal = 5 SemaVal = 0 подкачка
Так, очевидно, я не mallocing мою правильно-структуру, как значение внутри теряется, когда я выхожу за рамки. Я знаю, что должен просто забыть что-то простое. Есть идеи?
«Я уверен, что это просто, я просто пропустил это». - Может быть, или, может быть, это глубокое фундаментальное недоразумение. В конце концов, с точки зрения опытного (или даже не очень опытного) программиста C, очевидно, что 'ta_sem_init' теряет память и не имеет смысла. –
@JimBalter Это была просто пропущенная ошибка. Я это понимаю и да, это абсолютно утечка памяти. – tknickman
Наконец, чтобы повторить мою первую точку: присвоение значения 'malloc' параметру ** ** не является вопросом того, чтобы что-то игнорировать, это фундаментальное непонимание C и способ программирования в нем. –