在解决数据结构p48的数值转换问题上,遇到了第一个“段错误”。程序名为“Stack_test02”。错误的过程为:定义一个指针变量后,并未对指针赋值(并没有创建指针所指的对象),就直接试图通过指针对stack对象进行访问,结果产生错误。
typedef int stype;
typedef struct {
stype *base;
stype *top;
int Stack_size;
} stack,*point;
void Init_stack (point p0)
{
p0->base=(stype*)malloc(sizeof (stype)*maxsize);
p0->Stack_size=maxsize;
p0->top=p0->base;
}
void conversion (int a0,int cov)
{
stack p0;//错误发生地点
int e;
Init_stack (&p0);
while (a0>0){
Push_stack (&p0,a0%cov);
a0=a0/cov;
}
while (!Is_Empty(p0)){
Pop_stack (&p0,&e);
printf("%d",e);
}
}
如果在错误地点写成point p0,则会发生段错误,因为定义一个指针后并没有对指针赋值(即指向的内容还未被创建),因此在Init_stack函数中通过指针访问对象会导致失败。
以前没失败是因为在定义p0时我总会顺手写成以下形式:
point p0=(point)malloc(sizeof(stack));
点击打开链接(对错误的直观解释)
点击打开链接(常见内存错误种类)