指向另一个结构的结构指针成员导致分段错误(C / C ++)

时间:2016-09-21 07:09:05

标签: c++ c pointers structure

当结构成员指向另一个结构时,我会出现分段错误。详细说明,我的新结构是

typedef struct _sock_t{
  ir_socket_t *_socket;
  bool flag;
  extern_class obj;
  double *vect;
};

虽然我想指出的结构是ir_socket_t socket;。在main()中,如果我执行类似

的操作
  _sock_t *_sock ;
  _sock->_socket = &socket;

然后我得到分段错误。但是,

  _sock_t _sock ;
  _sock._socket = &socket; 

工作正常。第一种方法有什么问题。

P.S。请注意,ir_socket_t是C而不是C ++结构。

更新:  如果我还将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;可以正常使用。

1 个答案:

答案 0 :(得分:2)

这并不奇怪。在编写event loop时,你所做的就是声明一个指针。

但它没有指向任何东西。 解除引用的行为(在您的情况下通过指向成员运算符_sock_t *_sock的指针)是未定义

您需要将其指向已分配的内存。在C中使用->,在C ++中使用malloc。一旦完成指针,不要忘记分别调用newfree,否则你将泄漏内存。

最后,(确认@Karthick),看来你正在使用C ++编译器来编译C代码:在C中你需要编写delete

相关问题