B 1
berione65
sen272 1
sen272
Mt2Hizmet 1
Mt2Hizmet
C 1
chengdu
xranzei 1
xranzei
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

DB Manageri STD'ye değiştirme

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

Pointer ne işe yarıyor başımıza sorun oluştururmu tarzında sorular sorulmasından çekindiğim için böyle yazdım
DirectQuery fonksiyonu da zaten bir pointer fonksiyonu ama standart pointerların aksine smart pointerlar işlevini tamamladıktan sonra ramden silindiği için manuel olarak temizlenmeye ihtiyaç duymuyor. Eski pointerdan kalan ve ramde bulunmayan bir değerin silinmeye çalışılması emin olmamakla beraber Memory corruption yol açabileceğini düşünüyorum. Ama yine söylüyorum bu konuda çok iyi değilim elbet daha iyi bilen vardır ve en doğrusunu belirtir.
 
hepsi kendini kullandıktan sonra temizlemesine gerek yok zaten yeri geldiğinde kullanılıyor
Bunu söylerken neye dayanarak söylediniz merak ettim ?

SQLMsg * CAsyncSQL::DirectQuery(const char * c_pszQuery)
fonksiyonunu incelerseniz;
SQLMsg * p = new SQLMsg;

pointer oluşturup döndürüyor, bunu işlevi bittiğinde bellekten temizlemez ise memory leak lar ile boğuşursunuz.
 
C++:
    if(!IsPC())
    {
        if (pkKiller && pkKiller->IsPC() && 2092 == GetMobTable().dwVnum)
        {
            DBManager::instance().DirectQuery("UPDATE player SET bbarones = bbarones+1 WHERE name = '%s'", pkKiller->GetName());
        }
        else if (pkKiller && pkKiller->IsPC() && 2493 == GetMobTable().dwVnum)
        {
            DBManager::instance().DirectQuery("UPDATE player SET bejder = bejder+1 WHERE name = '%s'", pkKiller->GetName());
        }
    }

demene göre o zaman mesela ThePRNCE'nin boss sıralama sisteminde bu sorun var yani şimdi her kesilen boss ramde boss sıralama sistemi için yer mi tutuyor
Evet, Temiz bir sourceyi incelersen;

delete CDBManager::instance().DirectQuery

SQLMsg * pMsg = CDBManager::instance().DirectQuery
delete pMsg;

std::auto_ptr<SQLMsg> pkMsg(CDBManager::instance().DirectQuery(query))

Queryler de sürekli bu tarz kodlar görürsün, ymırın' da unuttuğu bazı yerler mevcut tabi.
 
C++:
    if(!IsPC())
    {
        char szQuery[QUERY_MAX_LEN];

        if (pkKiller && pkKiller->IsPC() && 2092 == GetMobTable().dwVnum)
        {
            snprintf(szQuery, sizeof(szQuery), "UPDATE player SET bbarones = bbarones+1 WHERE name = '%s'", pkKiller->GetName());
            delete DBManager::instance().DirectQuery(szQuery);
        }
        else if (pkKiller && pkKiller->IsPC() && 2493 == GetMobTable().dwVnum)
        {
            snprintf(szQuery, sizeof(szQuery), "UPDATE player SET bejder = bejder+1 WHERE name = '%s'", pkKiller->GetName());
            delete DBManager::instance().DirectQuery(szQuery);
        }
    }

Biraz inceledim tam anlayamamakla beraber böyle yapsam ne olur ?
szQuery tanımsız olduğu için hata alırsın
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst