为什么给以下结构体赋值会出现segmentation fault

#include<sys/types.h>/*basicsystemdatatypes*/#include<sys/socket.h>/*basicsocketdefin... #include <sys/types.h> /* basic system data types */
#include <sys/socket.h> /* basic socket definitions */
#include <netinet/in.h> /* sockaddr_in{} and other Internet defns */
#include <arpa/inet.h> /* inet(3) functions */
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct my_info
{
int sockfd;
struct sockaddr_in *my_subaddr;//Subnet address;
struct my_info *next;
}node;
int main(int argc, char *argv[])
{
node*s;
unsigned long netaddr;
netaddr = 0x7f000000;
s = (node*) malloc(sizeof(node));
s->my_subaddr->sin_addr.s_addr = netaddr;
return 0;
}

我已经给结构体分配空间了,为什么还出现segmentation fault,s_addr的类型是unsigned long啊,为什么还会越界,求帮助,谢谢。
展开
 我来答
金色潜鸟
2013-10-05 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5720万
展开全部
你只给 node*s 分配了空间。
但node 结构内部 的 my_subaddr 的指针 并未分配空间,也未 让它指向 某一个有存储单元的
struct sockaddr_in 型结构。
所以 接下去 的 sin_addr.s_addr 便没有 存储空间,于是 赋值语句 就垮了, 造成 “段错误”(segmentation fault)。
====
解决办法,s 动态分配后,给 s 内部 的 成员 my_subaddr 动态分配空间,或
声明 一个 struct sockaddr_in si; 结构,把 si 的地址 赋给 s->my_subaddr。
有了存储空间,再做unsigned long 的赋值。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式