指向另一个结构的结构指针成员导致分段错误(C/C++)
问题描述:
当结构成员指向另一个结构时,出现分段错误。详细地说,我的新结构指向另一个结构的结构指针成员导致分段错误(C/C++)
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.请注意0是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_t *_sock
你所做的只是声明一个指针。
但它不点任何东西。 取消引用的行为(在您的情况下,通过指向成员运营商->
的指针)是undefined。
您需要将它指向分配的内存。在C中使用malloc
,在C++中使用new
。一旦完成指针,请不要忘记分别拨打free
和delete
,否则您将内存泄漏。
最后,(承认@Karthick),看起来你正在使用C++编译器来编译C代码:在C中,你需要编写struct _sock_t *_sock;
。
你还没有初始化'_sock'。 – juanchopanza
'_sock_t * _sock'。在继续进行C编程之前,您最好了解指针。这是一个没有创意的指针,当然你不能解除引用。 – kaylum
变量'_sock'未初始化为指向有效(正确分配)的内存块。 –