У меня странная проблема с malloc.У меня есть этот typedefs:
typedef struct buffer {
int D;
int T;
unsigned int current_size;
unsigned int max_size;
pthread_mutex_t mutex;
pthread_cond_t non_pieno;
pthread_cond_t non_vuoto;
msg_t** messages;
struct buffer* (*buffer_init)(unsigned int);
void (*buffer_destroy)(struct buffer*);
} buffer_t;
И это функции buffer_init и buffer_destroy:
buffer_t* buffer_init(unsigned int maxsize)
{
buffer_t* new_buffer = (buffer_t*)malloc(sizeof(buffer_t));
msg_t** new_messages = (msg_t**)calloc(maxsize, sizeof(msg_t**));
pthread_mutex_t mx = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t np = PTHREAD_COND_INITIALIZER;
pthread_cond_t nv = PTHREAD_COND_INITIALIZER;
new_buffer->T = 0;
new_buffer->D = 0;
new_buffer->current_size = 0;
new_buffer->max_size = maxsize;
new_buffer->messages = new_messages;
new_buffer->mutex = mx;
new_buffer->non_pieno = np;
new_buffer->non_vuoto = nv;
new_buffer->buffer_init = buffer_init;
new_buffer->buffer_destroy = buffer_destroy;
return new_buffer;
}
void buffer_destroy(buffer_t* buffer) {
pthread_mutex_destroy(&buffer->mutex);
free(buffer);
}
Если я печатаю (после каждого вызова соответствующей последовательности buffer_destroy buffer_init) указатели, которыеполучить они почти одинаковы !!Например,
buffer_t* my_buff;
my_buff = buffer_init(1);
printf("%d", my_buff); //e.g 10023
printf("%d", my_buff->mutex); //e.g 56778
buffer_destroy(my_buff);
my_buff = buffer_init(1);
printf("%d", my_buff); //10023 again!!!
printf("%d", my_buff->mutex); //56778 again!!!
Я почти уверен, что проблема в том, что что-то не так с инициализацией и освобождением объекта buffer_t, знаете ли, по порядку:
a) Как правильно освободить памятьбуфер в buffer_destroy?б) Как правильно инициировать мьютекс?Я хочу создать новый мьютекс с каждым вызовом!в) я должен malloc для D и T?Я должен освободить их ??
Спасибо за ваше время!A.