Alf*_*oli 0 c malloc free pointers
我对malloc有一个奇怪的问题.我有这个typedef:
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;
Run Code Online (Sandbox Code Playgroud)
这是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);
}
Run Code Online (Sandbox Code Playgroud)
如果我打印(在每次调用正确的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!!!
Run Code Online (Sandbox Code Playgroud)
我很确定问题是buffer_t的初始化和释放出了问题,你知道吗,按顺序:
a)如何正确地将缓冲区释放到buffer_destroy中?b)如何正确启动互斥锁?我希望每次调用都创建一个新的互斥锁!c)我必须用于D和T的malloc?我必须解除他们?
谢谢你的时间!一个.
这看起来不像是个问题!你已经分配了一些内存,然后将其释放回系统.然后你要求更多相同大小的内存,而malloc系统已经注意到有一些大小的内存 - 它之前给你的内存!
如果您取消对您的通话,buffer_destroy()您应该会看到不同的值.(顺便说一句,我建议使用"%p"来打印指针值,而不是"%d").