【发布时间】:2015-03-09 18:10:06
【问题描述】:
如果我分配内存,释放它,然后尝试分配互斥体并锁定它,我会收到消息Assertion 'mutex->__data.__owner == 0'。我不是并发或低级编程方面的专家,但这对我来说似乎很奇怪。
代码
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
void nonzero_heap(){
void *ptrs[2];
ptrs[0] = malloc(16);
memset(ptrs[0], 0x80, 16);
ptrs[1] = malloc(32);
memset(ptrs[1], 0x80, 32);
free(ptrs[0]);
free(ptrs[1]);
}
int main(){
nonzero_heap();
pthread_mutex_t* mutex = malloc(sizeof(pthread_mutex_t));
pthread_mutex_lock(mutex);
return 0;
}
说明
我不太确定nonzero_heap() 做了什么(我复制/粘贴了它),除了它用一些垃圾填充堆然后释放它。因此,稍后当我分配互斥锁时,它可能会在同一个位置分配,我会收到此错误。
对这种行为有解释吗?我错过了什么?
【问题讨论】:
-
在尝试更改受保护的数据之前,您是否致电
pthread_mutex_unlock? mutex 只在main()的范围内定义,就像你写的那样。 -
@ryyker 嘿,我实际上在最后一分钟解决了这个问题。我只是忘了初始化..
标签: c pthreads mutex heap-memory memset