链表使用时可能出现的问题

如题,我打算创建一个长度为10的链表  
  dp = (struct * s)malloc(sizeof(struct s))  //保证先创建
     for(a = 1;a < 10;a++){
        dp->next = (struct  *s)malloc(sizeof(struct s));
        dp->value = a;
        dp = dp->next;
    }

必须保证先创建一个malloc内存  ,如果没有创建,在语句 dp = dp -> next 中    dp -> next 就是一个垃圾值,从而造成错误。  

 

 

 

c语言的指针还真是危险,就下面的代码而言,我在main函数中将指针s初始化为NULL,然后使用函数create_list分配了一块空间,指针的指向也改变了,但是在main函数中的s其实没有改变,因为传递的只是指针的备份。以至于我在插入值时检查s->nest是否为空时出错,因为s的值还是NULL,指向0

int main(void)
{
    struct sta * s;
    s = NULL;
    create_list(s);
    push(s,1);
    push(s,3);
    push(s,5);
    printf("%d\n",pop(s));
    printf("%d\n",pop(s));
    printf("%d\n",pop(s));

    return 0;
}
void create_list(struct sta * s)
{
    s = (struct sta *)malloc(sizeof(struct sta));
    s->x = -1;
    s->next = NULL;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值