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

Structure pointer member pointing to another structure leads to segmentation fault (C/C++)

本文关键字:结构 错误 C++ 分段 成员 指针 另一个      更新时间:2023-10-16

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

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

而我想要指向的结构是CCD_ 1。在main()中,如果我执行类似的操作

  _sock_t *_sock ;
  _sock->_socket = &socket;

然后我得到分割错误。然而,

  _sock_t _sock ;
  _sock._socket = &socket; 

工作良好。第一种方法有什么错。

第页。注意,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;工作得很好。

这并不奇怪。在编写_sock_t *_sock时,您所做的只是声明一个指针。

但它并没有指向任何东西。取消引用的行为(在您的情况下,通过指向成员运算符->的指针(是未定义的。

您需要将它指向已分配的内存。在C中对此使用malloc,在C++中使用ir_socket_t socket;0。完成指针后,不要忘记分别调用freedelete,否则会泄漏内存。

最后,(确认@Karthick(,您似乎正在使用C++编译器编译C代码:在C中,您需要编写struct _sock_t *_sock;