Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!
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.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
Bunu söylerken neye dayanarak söylediniz merak ettim ?hepsi kendini kullandıktan sonra temizlemesine gerek yok zaten yeri geldiğinde kullanılıyor
SQLMsg * CAsyncSQL:
irectQuery(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.
Evet, Temiz bir sourceyi incelersen;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
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.
szQuery tanımsız olduğu için hata alırsınC++: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 ?
nasıl tanımsız char szQuery[QUERY_MAX_LEN]; burada tanımlı QUERY_MAX_LEN commonda tanımlı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)
Benzer konular
- Cevaplar
- 6
- Görüntüleme
- 327
- Cevaplar
- 4
- Görüntüleme
- 276