0

私は次のような機能を持っています

char *mdb_data = NULL;
int mdb_dataLen = 0;

char *getMDBDataPtr(int len)
{
    if(len <= 0)
        return NULL;

    if(mdb_data == NULL)
    {
        mdb_data = (char *)malloc(len);
        memset(mdb_data, 0, len);
        mdb_dataLen = len;
    }
    else
    {
        if(mdb_dataLen < len)
        {
            free(mdb_data);
            mdb_data=NULL;
            mdb_data = (char *)malloc(len);
            memset(mdb_data, 0, len);
            mdb_dataLen = len;
        }
    }
    return mdb_data;
}

この関数が一度呼び出されると、つまり mdb_data=NULL が機能します。その後、長さ 1 、 2 、 3 で呼び出すと、3番目のケースのメモリを解放するときに失敗しました。つまり、解放が2回正常に機能し、アプリケーションがクラッシュします。なぜこれが起こっているのでしょうか?

4

0 に答える 0