diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-05-11 20:05:55 +0200 |
---|---|---|
committer | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-05-11 20:05:55 +0200 |
commit | 06115c652382d81bb25ce1dc3ad40e14f00ee273 (patch) | |
tree | d5cf275f96f4e5f6895eba5efce225ce50de3440 /src/resources | |
parent | 1bb315a8d32a8c0fb95a56ca495f387be7832cfc (diff) | |
download | mana-client-06115c652382d81bb25ce1dc3ad40e14f00ee273.tar.gz mana-client-06115c652382d81bb25ce1dc3ad40e14f00ee273.tar.bz2 mana-client-06115c652382d81bb25ce1dc3ad40e14f00ee273.tar.xz mana-client-06115c652382d81bb25ce1dc3ad40e14f00ee273.zip |
Fixed the memory issues with the pointers to item stat modifiers
It was a list of pointers to Stat instances that had long been popped
off the stack and deleted.
Diffstat (limited to 'src/resources')
-rw-r--r-- | src/resources/itemdb.cpp | 10 | ||||
-rw-r--r-- | src/resources/itemdb.h | 11 |
2 files changed, 14 insertions, 7 deletions
diff --git a/src/resources/itemdb.cpp b/src/resources/itemdb.cpp index 66c07849..99907ca7 100644 --- a/src/resources/itemdb.cpp +++ b/src/resources/itemdb.cpp @@ -55,9 +55,9 @@ static char const *const fields[][2] = { "mp", N_("MP %+d") } }; -static std::list<ItemDB::Stat*> extraStats; +static std::list<ItemDB::Stat> extraStats; -void ItemDB::setStatsList(std::list<ItemDB::Stat*> stats) +void ItemDB::setStatsList(const std::list<ItemDB::Stat> &stats) { extraStats = stats; } @@ -163,13 +163,13 @@ void ItemDB::load() if (!effect.empty()) effect += " / "; effect += strprintf(gettext(fields[i][1]), value); } - for (std::list<Stat*>::iterator it = extraStats.begin(); + for (std::list<Stat>::iterator it = extraStats.begin(); it != extraStats.end(); it++) { - int value = XML::getProperty(node, (*it)->tag.c_str(), 0); + int value = XML::getProperty(node, it->tag.c_str(), 0); if (!value) continue; if (!effect.empty()) effect += " / "; - effect += strprintf((*it)->format.c_str(), value); + effect += strprintf(it->format.c_str(), value); } std::string temp = XML::getProperty(node, "effect", ""); if (!effect.empty() && !temp.empty()) diff --git a/src/resources/itemdb.h b/src/resources/itemdb.h index 2bb8fd5e..d0964e49 100644 --- a/src/resources/itemdb.h +++ b/src/resources/itemdb.h @@ -46,12 +46,19 @@ namespace ItemDB const ItemInfo &get(int id); const ItemInfo &get(const std::string &name); - struct Stat { + struct Stat + { + Stat(const std::string &tag, + const std::string &format): + tag(tag), + format(format) + {} + std::string tag; std::string format; }; - void setStatsList(std::list<Stat*> stats); + void setStatsList(const std::list<Stat> &stats); // Items database typedef std::map<int, ItemInfo*> ItemInfos; |