構造体メンバが別の構造体を指しているときにセグメンテーション違反が発生します。私がポイントにしたい構造がir_socket_t socket;
である一方、詳細には、私の新しい構造が他の構造体を指す構造体ポインタメンバがセグメンテーションフォールト(C/C++)
typedef struct _sock_t{
ir_socket_t *_socket;
bool flag;
extern_class obj;
double *vect;
};
です。 main()
で、私が何かをしたら、
_sock_t *_sock ;
_sock->_socket = &socket;
私はセグメント違反を取得します。ただし、
_sock_t _sock ;
_sock._socket = &socket;
が問題ありません。最初のアプローチについて何が間違っていますか?
P.S. ir_socket_t
はCのC++構造ではないことに注意してください。
UPDATE: 私はまた、新しい構造体としてC++クラスのオブジェクトを考慮すれば、後者のアプローチには問題(なしポインタはありませんが、私はまだ
int n(4);
_sock->obj.resize(4); // here segmentation fault
でセグメンテーションフォールトを取得)。私がしてもこれは起こる_sock_t *_sock = (_sock_t *)malloc(sizeof(_sock_t));
; @ Bathshebba答えを使用して。
どうすれば問題ありますか?
_sock->vect= new double[n]
が問題なく動作することに注意してください。
代わりに_sock = new _sock_t;
が正常に機能することにも注意してください。
あなたは '_sock'を初期化していません。 – juanchopanza
'_sock_t * _sock'。 Cプログラミングでさらに進める前に、ポインタについて学ぶ方がよいでしょう。これは、元に戻されていないポインタです。もちろん、逆参照することはできません。 – kaylum
変数 '_sock'は、有効な(適切に割り当てられた)メモリブロックを指すように初期化されていません。 –