Функция initialize
s** initialize()
{
s** temp = (s**)malloc(sizeof(s*));
s* f = (s*)malloc(sizeof(s));
f->value = NULL;
temp = &f;
return temp;
}
может вызывать неопределенное поведение, поскольку она возвращает указатель на локальную переменную. И, кроме того, у него утечка памяти.
Сначала была выделена память и ее адрес был назначен переменной temp
s** temp = (s**)malloc(sizeof(s*));
Затем указатель был переназначен
temp = &f;
Таким образом, выделенная память не освобождается.
Указатель назначается адресом локальной переменной
s* f = (s*)malloc(sizeof(s));
//...
temp = &f;
После выхода из функции переменная f
перестает существовать. Значит, указатель temp имеет недопустимое значение.
Похоже, вы имеете в виду следующее
s** initialize()
{
s** temp = (s**)malloc(sizeof(s*));
s* f = (s*)malloc(sizeof(s));
f->value = NULL;
*temp = f;
return temp;
}
Если внести изменения, вы получите ожидаемый результат.
#include <stdio.h>
#include <stdlib.h>
typedef struct s{
int *value;
}s;
s** initialize()
{
s** temp = (s**)malloc(sizeof(s*));
s* f = (s*)malloc(sizeof(s));
f->value = NULL;
*temp = f;
return temp;
}
void function(s** what)
{
//Line L: size_t count = 0;
printf("In the function: %d\n", (*what)->value == NULL);
}
int main( void )
{
s** m = initialize();
printf("In the main function: %d\n", (*m)->value == NULL);
function(m);
free( *m );
free( m );
}
Вывод программы:
In the main function: 1
In the function: 1