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 に答える