int main() { /* NEPプログラミング部 */ } #40

40以下、名無しにかわりましてVIPがお送りします:2024/07/21(日) 02:04:41.39 ID:8qDetHhm

ただ、今回は0x9c(156)という中途半端な、とはいっても0にかなり近いアドレスにアクセスしようとしてクラッシュしていて、これはクラスや構造体へのポインタがNULLポインタなのにもかかわらずそのメンバにアクセスしようとしたからじゃないかと推測されている

そもそもクラスや構造体のインスタンスの実体は、メンバ変数やらメソッドへのポインタやらを詰め合わせてメモリ上にごちゃっと載せたものなんだ
とは言っても無造作に置くわけじゃなく、コンパイラは各メンバに対してオフセット、つまり各メンバをインスタンスの先頭のアドレスから何番地先に配置するかを決めておく
これで、あるインスタンスのあるメンバにアクセスしたいときは、(先頭のアドレス) + (メンバのオフセット) で求まる番地を見に行けばいいとわかる
そして、クラスや構造体へのポインタ(例えば class MyClass に対する MyClass*)はインスタンスの先頭のアドレスを保持している
もしこれがNULLポインタだったら…?
NULLは0だから、NULLポインタからオフセットが156のメンバにアクセスしようとしたのだとすれば、そのまんま0x9c(156)という中途半端なアドレスにアクセスしようとして失敗することになる

このスレッドを全て表示


このスレッドは過去ログです。