Yardım Shop Ex Memory Leak Fix Hata

  • Konuyu açan Konuyu açan LethalStrikeR
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 14
  • Gösterim Gösterim 1K
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

LethalStrikeR

Yardımsever Üye
Yardımsever Üye
MT Üye
Mesaj
701
Çözümler
41
Beğeni
168
Puan
609
Ticaret Puanı
0
Merhaba;
Bu fixi uyguluyorum fakat şöyle bir hata alıyorum. [Link Kaldırıldı]

Kod:
Genişlet Daralt Kopyala
shop_manager.cpp: In member function 'void CShopManager::Destroy()':
shop_manager.cpp:68: error: ISO C++ forbids declaration of 'it' with no type
shop_manager.cpp:68: error: cannot convert 'std::_Rb_tree_iterator<std::pair<const unsigned int, CShop> >' to 'int' in initialization
shop_manager.cpp:68: error: no match for 'operator!=' in 'it != ((CShopManager)this)->CShopManager::m_map_pkShopByNPCVnum.std::map<_Key, _Tp, _Compare, _Alloc>::end [with _Key = unsigned int, _Tp = CShop, _Compare = std::less<unsigned int>, _Alloc = std::allocator<std::pair<const unsigned int, CShop> >]()'
affect_flag.h:64: note: candidates are: bool operator!=(const TAffectFlag&, const TAffectFlag&)
shop_manager.cpp:69: error: base operand of '->' is not a pointer
shop_manager.cpp: In member function 'void CShopManager::Sell(CHARACTER, BYTE, BYTE)':
shop_manager.cpp:296: warning: comparison between signed and unsigned integer expressions
gmake: ** [OBJDIR/shop_manager.o] Error 1
 
En son bir moderatör tarafından düzenlenmiş:
Kodları tam incelemedim ama bende bu fix şu şekilde ve fixi sitelerden değil marty sama filesinden alıp kendime eklemiştim.


C++:
Genişlet Daralt Kopyala
void CShopManager::Destroy()
{
#ifdef MEMORY_LEAK_FIX_3
    for (auto it = m_map_pkShopByNPCVnum.begin(); it != m_map_pkShopByNPCVnum.end(); ++it)
        delete it->second;
    m_map_pkShopByNPCVnum.clear();
#else
    TShopMap::iterator it = m_map_pkShop.begin();

    while (it != m_map_pkShop.end())
    {
        M2_DELETE(it->second);
        ++it;
    }
#endif
    m_map_pkShop.clear();
}


C++:
Genişlet Daralt Kopyala
#ifdef MEMORY_LEAK_FIX_3
        if (m_map_pkShop.find(table.dwVnum) != m_map_pkShop.end())
        {
            sys_err("Shop vnum(%d) already exist.", table.dwVnum);
            return false;
        }
#else
        if (pkShopEx->GetVnum() != 0 && m_map_pkShop.find(pkShopEx->GetVnum()) != m_map_pkShop.end())
        {
            sys_err("Shop vnum(%d) already exist.", pkShopEx->GetVnum());
            return false;
        }
#endif


Ayrıca #include kısmınıda kontrol etmeni öneririm belki ınclude olarak eksiğin vardır.
Kod:
Genişlet Daralt Kopyala
#include "stdafx.h"
#include "../../libgame/include/grid.h"
#include "constants.h"
#include "utils.h"
#include "config.h"
#include "shop.h"
#include "desc.h"
#include "desc_manager.h"
#include "char.h"
#include "char_manager.h"
#include "item.h"
#include "item_manager.h"
#include "buffer_manager.h"
#include "packet.h"
#include "log.h"
#include "db.h"
#include "questmanager.h"
#include "mob_manager.h"
#include "locale_service.h"
#include "desc_client.h"
#include "shop_manager.h"
#include "group_text_parse_tree.h"
#include "shopEx.h"
#include <boost/algorithm/string/predicate.hpp>
#include "shop_manager.h"
#include <cctype>
 
Son düzenleme:
Kodları tam incelemedim ama bende bu fix şu şekilde ve fixi sitelerden değil marty sama filesinden alıp kendime eklemiştim.


C++:
Genişlet Daralt Kopyala
void CShopManager::Destroy()
{
#ifdef MEMORY_LEAK_FIX_3
    for (auto it = m_map_pkShopByNPCVnum.begin(); it != m_map_pkShopByNPCVnum.end(); ++it)
        delete it->second;
    m_map_pkShopByNPCVnum.clear();
#else
    TShopMap::iterator it = m_map_pkShop.begin();

    while (it != m_map_pkShop.end())
    {
        M2_DELETE(it->second);
        ++it;
    }
#endif
    m_map_pkShop.clear();
}


C++:
Genişlet Daralt Kopyala
#ifdef MEMORY_LEAK_FIX_3
        if (m_map_pkShop.find(table.dwVnum) != m_map_pkShop.end())
        {
            sys_err("Shop vnum(%d) already exist.", table.dwVnum);
            return false;
        }
#else
        if (pkShopEx->GetVnum() != 0 && m_map_pkShop.find(pkShopEx->GetVnum()) != m_map_pkShop.end())
        {
            sys_err("Shop vnum(%d) already exist.", pkShopEx->GetVnum());
            return false;
        }
#endif


Ayrıca #include kısmınıda kontrol etmeni öneririm belki ınclude olarak eksiğin vardır.
Kod:
Genişlet Daralt Kopyala
#include "stdafx.h"
#include "../../libgame/include/grid.h"
#include "constants.h"
#include "utils.h"
#include "config.h"
#include "shop.h"
#include "desc.h"
#include "desc_manager.h"
#include "char.h"
#include "char_manager.h"
#include "item.h"
#include "item_manager.h"
#include "buffer_manager.h"
#include "packet.h"
#include "log.h"
#include "db.h"
#include "questmanager.h"
#include "mob_manager.h"
#include "locale_service.h"
#include "desc_client.h"
#include "shop_manager.h"
#include "group_text_parse_tree.h"
#include "shopEx.h"
#include <boost/algorithm/string/predicate.hpp>
#include "shop_manager.h"
#include <cctype>
İnclude kısmı aynı. Sizin verdiğiniz fixi uyguladım fakat böyle bir hata aldım.
Kod:
Genişlet Daralt Kopyala
shop_manager.cpp: In member function 'void CShopManager::Destroy()':
shop_manager.cpp:69: error: ISO C++ forbids declaration of 'it' with no type
shop_manager.cpp:69: error: cannot convert 'std::_Rb_tree_iterator<std::pair<con                                                                                                                                                             st unsigned int, CShop*> >' to 'int' in initialization
shop_manager.cpp:69: error: no match for 'operator!=' in 'it != ((CShopManager*)                                                                                                                                                             this)->CShopManager::m_map_pkShopByNPCVnum.std::map<_Key, _Tp, _Compare, _Alloc>                                                                                                                                                             ::end [with _Key = unsigned int, _Tp = CShop*, _Compare = std::less<unsigned int                                                                                                                                                             >, _Alloc = std::allocator<std::pair<const unsigned int, CShop*> >]()'
affect_flag.h:64: note: candidates are: bool operator!=(const TAffectFlag&, cons                                                                                                                                                             t TAffectFlag&)
shop_manager.cpp:70: error: base operand of '->' is not a pointer
shop_manager.cpp: In member function 'void CShopManager::Sell(CHARACTER*, BYTE,                                                                                                                                                              BYTE)':
shop_manager.cpp:307: warning: comparison between signed and unsigned integer ex                                                                                                                                                             pressions
gmake: *** [OBJDIR/shop_manager.o] Error 1
gmake: *** Waiting for unfinished jobs....
../../../Extern/include/cryptopp/misc.h: At global scope:
../../../Extern/include/cryptopp/misc.h:548: warning: 'std::string CryptoPP::Str                                                                                                                                                             ingNarrow(const wchar_t*, bool)' defined but not used
 
İnclude kısmı aynı. Sizin verdiğiniz fixi uyguladım fakat böyle bir hata aldım.
Kod:
Genişlet Daralt Kopyala
shop_manager.cpp: In member function 'void CShopManager::Destroy()':
shop_manager.cpp:69: error: ISO C++ forbids declaration of 'it' with no type
shop_manager.cpp:69: error: cannot convert 'std::_Rb_tree_iterator<std::pair<con                                                                                                                                                             st unsigned int, CShop*> >' to 'int' in initialization
shop_manager.cpp:69: error: no match for 'operator!=' in 'it != ((CShopManager*)                                                                                                                                                             this)->CShopManager::m_map_pkShopByNPCVnum.std::map<_Key, _Tp, _Compare, _Alloc>                                                                                                                                                             ::end [with _Key = unsigned int, _Tp = CShop*, _Compare = std::less<unsigned int                                                                                                                                                             >, _Alloc = std::allocator<std::pair<const unsigned int, CShop*> >]()'
affect_flag.h:64: note: candidates are: bool operator!=(const TAffectFlag&, cons                                                                                                                                                             t TAffectFlag&)
shop_manager.cpp:70: error: base operand of '->' is not a pointer
shop_manager.cpp: In member function 'void CShopManager::Sell(CHARACTER*, BYTE,                                                                                                                                                              BYTE)':
shop_manager.cpp:307: warning: comparison between signed and unsigned integer ex                                                                                                                                                             pressions
gmake: *** [OBJDIR/shop_manager.o] Error 1
gmake: *** Waiting for unfinished jobs....
../../../Extern/include/cryptopp/misc.h: At global scope:
../../../Extern/include/cryptopp/misc.h:548: warning: 'std::string CryptoPP::Str                                                                                                                                                             ingNarrow(const wchar_t*, bool)' defined but not used
Gcc sürümün kaç? Ve makefile dosyanda std c++ sürümün kaç.
 
Gcc sürümün kaç? Ve makefile dosyanda std c++ sürümün kaç.
Kod:
Genişlet Daralt Kopyala
    makedepend -f Depend $(INCDIR) -I/usr/include/c++/3.3 -I/usr/include/c++/4.2 -p$(OBJDIR)/ $(CPPFILE) $(CFILE) $(MAINCPP) $(TESTCPP) 2> /dev/null > Depend

Böyle bir kod bloğu var. Gcc sürümüm de "CC = g++" bu.
 
Kod:
Genişlet Daralt Kopyala
    makedepend -f Depend $(INCDIR) -I/usr/include/c++/3.3 -I/usr/include/c++/4.2 -p$(OBJDIR)/ $(CPPFILE) $(CFILE) $(MAINCPP) $(TESTCPP) 2> /dev/null > Depend

Böyle bir kod bloğu var. Gcc sürümüm de "CC = g++" bu.
Ben gcc10 ile std:c++17 kullanıyorum senin sorunda bu galiba sen orjinal dosyaların kullandığı gcc sürümünü kullanıyorsun buildde errorda ise ISO olarak bir error vermiş bu da dil ile ilgili bir hata. GCC sürümünü yükselterek sorun çözeleceğini düşünüyorum yanlışımda olabilir daha iyi bilen varsa cevaplasın ama benim düşüncem bu. Benim fixi aldığım files gcc8 kullanıyordu diğer başka fileste ise gcc9 kullanıyordu ve fixler aynı idi.
 
Bu konuda pek bilgili değilim. İnternette 4.9 bulabildim. Zaten 4.9 bile yapamamışım build yaparken sonda hata veriyor.
Diğer forumda gcc7 güncellemesi anlatımı var yada @Whistle nin anlatımıda var youtube kanalında gcc9 için. Youtube kanalından bakarak yaparsan sorunsuz yükseltirsin.
 
Üst