C++ のポインター周辺の勉強をしています。以下のポインター型のメンバー変数を持つクラス・構造体を使ったプログラムがメモリー関連のエラー
'./main' terminated by signal SIGSEGV (Address boundary error)
'./main' terminated by signal SIGBUS (Misaligned address error)
になったりならなかったりするのですが、なぜなのか分かりません。
cpp
1#include <print> 2 3struct Point { 4 double * x; 5 double * y; 6 Point(double x, double y) { 7 *this->x = x; 8 *this->y = y; 9 } 10 ~Point() {} 11 void show() { 12 std::println("Point {{ x: {}, y: {} }}", *x, *y); 13 } 14}; 15 16int main() { 17 Point a = Point(1, 2); 18 a.show(); 19}
なにがまずいのでしょうか?
また、コンパイル時、以下の警告が出ます。
g++-14 -std=c++23 -Wall main.cpp -o main main.cpp: In constructor 'Point::Point(double, double)': main.cpp:7:16: warning: '*this.Point::x' is used uninitialized [-Wuninitialized] 7 | *this->x = x;
今の方法は良い初期化ではなさそうなのですが、普通はどうするのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/10/19 05:35