質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

受付中

gdbデバッガによる「Cannot access memory at address」の対処方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

2回答

0評価

0クリップ

747閲覧

投稿2022/02/04 03:45

編集2022/02/04 07:12

提示コードですがgdbデバッガにて///コメント部内部の「Cannot access memory at address」エラーが発生するのですがこれはどう対処したらいいのでしょうか?下記の提示コードが問題の関数ですが問題点がわかりません。

Console
(gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /home/shigurechan/prg/TopDownGame/Game [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". [New Thread 0x7fffec8fb700 (LWP 25028)] [New Thread 0x7fffe7fff700 (LWP 25029)] Thread 1 "Game" received signal SIGSEGV, Segmentation fault. 0x00005555555653d1 in glm::vec<2, int, (glm::qualifier)0>::vec (this=0x5555555c8d82, _x=0, _y=0) at /usr/local/include/glm/detail/type_vec2.inl:40 40 : x(_x), y(_y) (gdb) bt #0 0x00005555555653d1 in glm::vec<2, int, (glm::qualifier)0>::vec (this=0x5555555c8d82, _x=0, _y=0) at /usr/local/include/glm/detail/type_vec2.inl:40 #1 0x0000555555589c48 in FrameWork::texture::texture (this=0x5555555c8d82) at FrameWork/source/../header/Resource_use.hpp:20 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #2 0x00005555555894f5 in FrameWork::LoadTexture (fileName=0x1 <error: Cannot access memory at address 0x1>) at FrameWork/source/Resource.cpp:288 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #3 0x000055555559e129 in Player::Player (this=0x55555565ac20) at source/Player.cpp:17 #4 0x000055555559d09b in __gnu_cxx::new_allocator<Player>::construct<Player> (this=0x7fffffffd9df, __p=0x55555565ac20) at /usr/include/c++/9/ext/new_allocator.h:147 #5 0x000055555559cd29 in std::allocator_traits<std::allocator<Player> >::construct<Player> (__a=..., __p=0x55555565ac20) at /usr/include/c++/9/bits/alloc_traits.h:484 #6 0x000055555559c7a4 in std::_Sp_counted_ptr_inplace<Player, std::allocator<Player>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<>(std::allocator<Player>) (this=0x55555565ac10, __a=...) at /usr/include/c++/9/bits/shared_ptr_base.h:548 #7 0x000055555559c104 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<Player, std::allocator<Player>>(Player*&, std::_Sp_alloc_shared_tag<std::allocator<Player> >) (this=0x7fffffffdb08, __p=@0x7fffffffdb00: 0x0, __a=...) at /usr/include/c++/9/bits/shared_ptr_base.h:679 #8 0x000055555559bd78 in std::__shared_ptr<Player, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<Player>>(std::_Sp_alloc_shared_tag<std::allocator<Player> >) (this=0x7fffffffdb00, __tag=...) at /usr/include/c++/9/bits/shared_ptr_base.h:1344 #9 0x000055555559ba69 in std::shared_ptr<Player>::shared_ptr<std::allocator<Player>>(std::_Sp_alloc_shared_tag<std::allocator<Player> >) (this=0x7fffffffdb00, __tag=...) at /usr/include/c++/9/bits/shared_ptr.h:359 #10 0x000055555559b740 in std::allocate_shared<Player, std::allocator<Player>>(std::allocator<Player> const&) (__a=...) at /usr/include/c++/9/bits/shared_ptr.h:702 #11 0x000055555559b3b0 in std::make_shared<Player> () at /usr/include/c++/9/bits/shared_ptr.h:718 #12 0x000055555559add7 in Game::Game (this=0x555555e96d60) at source/Game.cpp:8 #13 0x000055555559aab3 in __gnu_cxx::new_allocator<Game>::construct<Game> (this=0x7fffffffdc1f, __p=0x555555e96d60) at /usr/include/c++/9/ext/new_allocator.h:147 #14 0x000055555559a9b3 in std::allocator_traits<std::allocator<Game> >::construct<Game> (__a=..., __p=0x555555e96d60) at /usr/include/c++/9/bits/alloc_traits.h:484 #15 0x000055555559a7f2 in std::_Sp_counted_ptr_inplace<Game, std::allocator<Game>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<>(std::allocator<Game>) (this=0x555555e96d50, __a=...) at /usr/include/c++/9/bits/shared_ptr_base.h:548 #16 0x000055555559a536 in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<Game, std::allocator<Game>>(Game*&, std::_Sp_alloc_shared_tag<std::allocator<Game> >) (this=0x7fffffffdd38, __p=@0x7fffffffdd30: 0x0, __a=...) at /usr/include/c++/9/bits/shared_ptr_base.h:679 #17 0x000055555559a3fa in std::__shared_ptr<Game, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<Game>>(std::_Sp_alloc_shared_tag<std::allocator<Game> >) (this=0x7fffffffdd30, __tag=...) at /usr/include/c++/9/bits/shared_ptr_base.h:1344 #18 0x000055555559a2f3 in std::shared_ptr<Game>::shared_ptr<std::allocator<Game>>(std::_Sp_alloc_shared_tag<std::allocator<Game> >) (this=0x7fffffffdd30, __tag=...) at /usr/include/c++/9/bits/shared_ptr.h:359 #19 0x000055555559a1fc in std::allocate_shared<Game, std::allocator<Game>>(std::allocator<Game> const&) (__a=...) at /usr/include/c++/9/bits/shared_ptr.h:702 #20 0x000055555559a0c2 in std::make_shared<Game> () at /usr/include/c++/9/bits/shared_ptr.h:718 #21 0x0000555555599ec2 in Entry::Entry (this=0x5555557c7990) at source/Entry.cpp:8 #22 0x000055555559db7b in std::make_unique<Entry> () at /usr/include/c++/9/bits/unique_ptr.h:857 --Type <RET> for more, q to quit, c to continue without paging--
FrameWork::LoadTexture()

cpp

// ##################################### テクスチャをロード ##################################### FrameWork::Texture FrameWork::LoadTexture(const char* fileName) { Texture texture; glm::ivec2 size; int channel; unsigned char* data = NULL; data = stbi_load(fileName, &size.x, &size.y, &channel, 0); texture.size = size; if (data == NULL) { std::cerr << "画像が見つかりません: " << fileName << std::endl; assert(0); } glGenTextures(1, &texture.ID); //テクスチャIDの生成 glBindTexture(GL_TEXTURE_2D, texture.ID); // IDバインド //テクスチャ生成 if (channel == 4) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.x, size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); } else if (channel == 3) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, size.x, size.y, 0, GL_RGB, GL_UNSIGNED_BYTE, data); } else if (channel == 2) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RG, size.x, size.y, 0, GL_RG, GL_UNSIGNED_BYTE, data); } else if (channel == 1) { glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, size.x, size.y, 0, GL_RED, GL_UNSIGNED_BYTE, data); } else { std::cerr << "未対応の形式のチャンネル数です: " << fileName <<" "<< "チャンネル数: "<<channel<< std::endl; assert(0); } // テクスチャの補間設定 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); texture.data = data; return texture; }
Player.cpp
#include "../header/Player.hpp" #define SPEED (int)4; #define WEAPON_ANIMATION_SPEED ((int)10) #define WALK_ANIMATION_SPEED ((int)20) #define THROW_SPEED ((int)5) #define THROW_MOVE_SPEED ((int)150) #define THROW_DISTANCE ((int)300) Player::Player() : Actor() { position = glm::ivec2(0,0); throwPosition = glm::ivec2(0,0); throwDistance = 0; speed = SPEED; moveVector = glm::vec2(1,0); up_sprite = FrameWork::LoadTexture("Asset/texture/up.png"); down_sprite = FrameWork::LoadTexture("Asset/texture/down.png"); left_sprite = FrameWork::LoadTexture("Asset/texture/left.png"); right_sprite = FrameWork::LoadTexture("Asset/texture/right.png"); sword_right_sprite[0] = FrameWork::LoadTexture("Asset/texture/sword_right_0.png"); sword_right_sprite[1] = FrameWork::LoadTexture("Asset/texture/sword_right_1.png"); sword_right_sprite[2] = FrameWork::LoadTexture("Asset/texture/sword_right_2.png"); sword_right_sprite[3] = FrameWork::LoadTexture("Asset/texture/sword_right_3.png"); isThrow = false; state = State::Wait; animation_Attack_Time = 0; animation_Attack_Clip = 1; animation_Time = 0; animation = false; isMove = false; isAttack = false; }
FrameWork::Texture 構造体

cpp

//テクスチャファイル typedef struct texture { glm::ivec2 size = glm::ivec2(0,0); //サイズ GLuint ID = 0; //テクスチャハンドル unsigned char* data; //ピクセルデータ } Texture;
Makefile
PRG :=Game SRC_DIR :=FrameWork/source SRC_USE_DIR :=source OBJ_DIR :=FrameWork/object OBJ_USE_DIR :=object DEP_DIR :=FrameWork/object DEP :=$(wildcard $(DEP_DIR)/*.d) SRC :=$(wildcard $(SRC_DIR)/*.cpp) SRC_USE :=$(wildcard $(SRC_USE_DIR)/*.cpp) OBJ :=$(addprefix $(OBJ_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC)))) OBJ_USE :=$(addprefix $(OBJ_USE_DIR)/,$(patsubst %.cpp,%.o,$(notdir $(SRC_USE)))) $(PRG): $(OBJ) $(OBJ_USE) $(CXX) $^ -o $@ -ldl -lGLESv2 -lGLU -lGL -lglfw3 -pthread -lGL -lGLEW -lfreetype -ldl -lX11 $(OBJ_DIR)/%.o: FrameWork/source/%.cpp $(CXX) -g -c -MMD -MP $< -o $@ -include $(DEP) $(OBJ_USE_DIR)/%.o: source/%.cpp $(CXX) -g -c -MMD -MP $< -o $@ -include $(DEP) clean: rm -f ./$(OBJ_USE_DIR)/*.o ./$(OBJ_DIR)/*.o *.out ./$(OBJ_DIR)/*.d ./$(OBJ_USE_DIR)/*.d $(PRG)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。