结构指针成员指向另一个结构会导致分段错误(C/C++)
Structure pointer member pointing to another structure leads to segmentation fault (C/C++)
当一个结构成员指向另一个结构时,我会出现分段错误。详细地说,我的新结构是
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。完成指针后,不要忘记分别调用free
和delete
,否则会泄漏内存。
最后,(确认@Karthick(,您似乎正在使用C++编译器编译C代码:在C中,您需要编写struct _sock_t *_sock;
。
相关文章:
- C++ 结构错误"调用'erase'没有匹配函数
- 尝试传递结构数组,但出现"无法将'结构'转换为'结构*'错误
- 结构错误:"no matching function for call to "
- UE4 数据表结构错误
- STL 对priority_queue<int、结构>错误
- C :用于体系结构错误的经典未定义符号
- 体系结构错误的未定义符号
- 奇怪的用户定义的比较结构错误,用于C++中的priority_queue
- 模板结构错误
- C++结构错误 - 错误 C2061:语法错误:标识符
- C++ 结构错误的前向声明
- 结构错误"uninitialized reference member"
- 使用 MPL::fold 与占位符和我自己的结构错误
- C++结构错误"No matching function for call..."
- 插入映射<字符串,结构>错误
- CPP 头文件结构错误
- 矢量和结构错误
- C++ 结构 - 错误 1 错误 C2143:语法错误:缺少'*'之前的';'
- 结构错误的构造函数(调用类的构造函数 denconstructor,用于填充结构)
- 结构错误与C++