如题,我打算创建一个长度为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;
}