std::向量成员变量 EXC_BAD_ACCESS
std::vector member variable EXC_BAD_ACCESS
我的类load_game_state
(定义(有一个vector<shared_ptr<SaveGameState>>
类型的成员变量_saveGameItems
,并且永远不会初始化(它不需要(。
尝试在此向量上使用push_back()
或emplace_back()
时,出现EXC_BAD_ACCESS
错误。我不明白为什么我不能向这个向量添加对象。
填充矢量的SaveGameData
对象saves
。正确构造,每个对象包含三个字符串(即路径,描述和时间戳(实际上只是一个字符串((。
我的代码:
load_game_state.cpp
vector<std::string> LoadGameState::getFilePathsOfSaveGames() {
JSONParser jp = JSONParser {};
vector<string> paths = get_all("assets/saves/", ".json");
vector<shared_ptr<SaveGameItem>> saves;
// Extract data
for(auto path : paths) {
json tmpData = jp.getSaveGame(path);
saves.emplace_back(make_shared<SaveGameItem>(SaveGameItem(path, tmpData.at("saveTime"), tmpData.at("name"))));
}
_saveGameItems = saves;
}
load_game_state.h
#ifndef RISKY_LOAD_GAME_STATE_H
#define RISKY_LOAD_GAME_STATE_H
#include "state.h"
#include "../risky.h"
#include "../scenes/load_game_scene.h"
#include "load_game_controller.h"
#include "../models/SaveGameItem.h"
#include <boost/filesystem.hpp>
namespace fs = ::boost::filesystem;
class LoadGameState : public State, public LoadGameController {
public:
LoadGameState(Risky& context, GameEngine& engine, StateManager* stateManager);
BaseScene& getScene() override;
void doQuit() override;
void handleInput() override;
void update() override;
~LoadGameState();
vector<string> get_all(const boost::filesystem::path& root, const string& ext);
const vector<shared_ptr<SaveGameItem>> &get_saveGameItems() const;
void set_saveGameItems(const vector<shared_ptr<SaveGameItem>> &_saveGameItems);
// TODO get file paths of all JSON files
vector<std::string> getFilePathsOfSaveGames() override;
// TODO parse into SaveGameItem objects
// TODO display these objects
private:
LoadGameScene _scene;
Risky& _riskyRef;
GameEngine& _engineRef;
// SaveGameItems
vector<shared_ptr<SaveGameItem>> _saveGameItems;
};
#endif //RISKY_LOAD_GAME_STATE_H
保存游戏项如下所示:
class SaveGameItem {
public:
SaveGameItem();
SaveGameItem(std::string filePath, std::string timestamp, std::string name);
const std::string &get_filePath() const;
void set_filePath(const std::string &_filePath);
const std::string &get_timestamp() const;
void set_timestamp(const std::string &_timestamp);
const std::string &get_name() const;
void set_name(const std::string &_name);
~SaveGameItem();
private:
std::string _filePath;
std::string _timestamp;
std::string _name;
};
发现问题。 _saveGameItems
尚未初始化,因为调用getFilePathsOfSaveGames()
的类的构造函数是在另一个类的构造函数中调用的,以防止初始化_saveGameItems
。
相关文章:
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- "Access is Denied" U盘上的创建文件()
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 例外:'Access violation reading location'
- 向量数组"Cannot access memory at address"
- Windeployqt不会运行,"Access is denied."
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++
- Access C++ Enum from Swift
- Java 本机访问代码错误:"Invalid memory access"
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 如何获得私人会员的"read access"?
- 将数据添加到 CArray 会产生错误"cannot access private member declared in class 'CObject'"
- Bad Linux Memory Map File Performance with Random Access C++ & Python