免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1588 | 回复: 15
打印 上一主题 下一主题

急急急!!请教链表的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-07 16:39 |只看该作者 |倒序浏览
creatoutlist为建立含一个节点的链表的函数。经gcc编译,程序执行时
输出
malloc of 24 bytes success!
saddrip=210.76.120.6,length=32342
segmentation fault(core dumped)

在strcpy(s->;saddr,saddrip);   开始出现故障。

#define LEN sizeof(linkoutlist)

typedef struct outnode
{
  char saddr[16];
  unsigned long length;
  struct outnode * next;
}linkoutlist;


void *emalloc(unsigned int n)
{
    void *p;
    p = malloc(n);
    if(p=NULL)
       printf("malloc of %u bytes failed:\n",n);
    else
       printf("malloc of %u bytes success!\n",n);
    return p;
       
}

linkoutlist *creatoutlist(char *saddrip,unsigned long length)
{
    linkoutlist * head,* s;
   // head = (linkoutlist *) emalloc(LEN);
   
    head = NULL;  /* outlist链表开始为空 */
     
    s = (linkoutlist *) emalloc(LEN);
  
   // s->;saddr = saddrip;
    printf("saddrip=%s,length=%lu.\n",saddrip,length);

    strcpy(s->;saddr,saddrip);   //出现故障???
     s->;length = length;      //出现故障????
   
    printf("333333\n";
    s->;next = head;
    head = s;
    return head;
   
}


请教:
1。  malloc of 24 bytes success!  中24是怎么得出来的?
2。为何strcpy(s->;saddr,saddrip);   //出现故障???
     我该如何做,才能把saddrip=210。76。120。6信息存放到链表中?

论坛徽章:
0
2 [报告]
发表于 2003-08-07 16:53 |只看该作者

急急急!!请教链表的问题

1.typedef struct outnode
{
char saddr[16];
unsigned long length;
struct outnode * next;
}linkoutlist;
这个结构的大小是16+4+4=24,所以malloc了24个字节。
2.这个问题我不知道为什么...看起来并没有错啊.

论坛徽章:
0
3 [报告]
发表于 2003-08-07 17:11 |只看该作者

急急急!!请教链表的问题

谢谢abyss.

我还想向你请教     16+4+4=24 中struct outnode * next为何有四个字节 ,能详细说明一下吗?

论坛徽章:
0
4 [报告]
发表于 2003-08-07 17:12 |只看该作者

急急急!!请教链表的问题

问题可能不在这两句
strcpy(s->;saddr,saddrip); //出现故障???
s->;length = length; //出现故障????
而在
s = (linkoutlist *) emalloc(LEN);
你定义的局部变量s没有初始化,第一次执行这个函数可能没有什么问题,但是当第二次进入这个函数体的时候,就可能产生segmentation fault了,试着把s初始化为NULL……

论坛徽章:
0
5 [报告]
发表于 2003-08-07 17:15 |只看该作者

急急急!!请教链表的问题

struct outnode * next
该结构成员为一个指针变量,在32位操作系统里面,所有指针都是32位的,也就是4个字节。

论坛徽章:
0
6 [报告]
发表于 2003-08-07 17:19 |只看该作者

急急急!!请教链表的问题

谢谢abyss,我先试试,有问题在向你请教

论坛徽章:
0
7 [报告]
发表于 2003-08-07 17:22 |只看该作者

急急急!!请教链表的问题

好,没问题。

论坛徽章:
0
8 [报告]
发表于 2003-08-07 17:28 |只看该作者

急急急!!请教链表的问题

我在strcpy(s->;saddr,saddrip); //出现故障??? 前先初始化s ,s=NULL  可是还是不行,提示的错误和以前的一样。

这问题到底出在哪里呢?

论坛徽章:
0
9 [报告]
发表于 2003-08-07 17:31 |只看该作者

急急急!!请教链表的问题

可不可以把完整的程序发出来一起研究?

论坛徽章:
0
10 [报告]
发表于 2003-08-07 17:35 |只看该作者

急急急!!请教链表的问题

讨论得好热烈,呵呵,不过问题不是这里!
看看:

  1. void *emalloc(unsigned int n)
  2. {
  3. void *p;
  4. p = malloc(n);
  5. if(p=NULL)
  6. printf("malloc of %u bytes failed:\n",n);
  7. else
  8. printf("malloc of %u bytes success!\n",n);
  9. return p;

  10. }

复制代码

里面的一句if(p=NULL)
发现问题了吗??
应为if(p==NULL)
这个问题c陷阱那本书提及了,要仔细阿。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP