当结构成员指向另一个结构时,我会出现分段错误。详细说明,我的新结构是
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;
可以正常使用。
答案 0 :(得分:2)
这并不奇怪。在编写event loop
时,你所做的就是声明一个指针。
但它没有指向任何东西。 解除引用的行为(在您的情况下通过指向成员运算符_sock_t *_sock
的指针)是未定义。
您需要将其指向已分配的内存。在C中使用->
,在C ++中使用malloc
。一旦完成指针,不要忘记分别调用new
和free
,否则你将泄漏内存。
最后,(确认@Karthick),看来你正在使用C ++编译器来编译C代码:在C中你需要编写delete
。