我通过预加载库来重载“malloc”。在这个自定义“malloc”中,我使用环境变量来区分我的程序,以使用我从一般“malloc”中定制的“malloc”。
问题是,在几个“mallocs”之后,程序卡在getenv()调用中。我无法弄清楚为什么程序会陷入其中。
代码如下:
void* PerfTrackMallocInterposition::Malloc(size_t size) {
// Malloc with statistics
pthread_mutex_lock(&fgPTMutex);
char *checkCDBEnd=NULL;
static const char* CDBEndEnv = "checkCDBEnd";
checkCDBEnd = getenv(CDBEndEnv); //program gets stuck here
if(checkCDBEnd!=NULL)
{
if(checkCDBEnd[0]=='1')
{
if(size>1024)
{
void *result = Alloc(size); //Call to custom malloc
pthread_mutex_unlock(&fgPTMutex);
return result;
}
}
}
void* result = (*fPMalloc)(size); //call to normal malloc
pthread_mutex_unlock(&fgPTMutex);
return result;
}
在使用vim编辑器的库时,我也在同一位置出现总线错误。
请帮帮我。
谢谢
答案 0 :(得分:0)
你确定该程序卡在getenv()
电话上?我会更加怀疑互斥锁:如果另一个线程持有互斥锁,pthread_mutex_lock(&fgPTMutex);
将阻塞