0

我通过预加载库来重载“malloc”。在这个自定义的“malloc”中,我使用环境变量来区分我的程序使用我的自定义“malloc”和一般的“malloc”。

问题是,在几次“malloc”之后,程序被卡在 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 编辑器一起使用时,我也在同一位置遇到总线错误。

请帮我。

谢谢你

4

1 回答 1

0

确定程序卡在getenv()通话中吗?我会更怀疑互斥锁:pthread_mutex_lock(&fgPTMutex);如果另一个线程持有互斥锁,将阻塞

于 2012-04-16T10:46:25.710 回答