上周写数据结构作业,遇到了一个奇怪的现象,涉及到图比较复杂,简化后就是如下的代码:
#include<stdio.h>
#include<stdlib.h>
struct sqstack{
int *base;
int *top;
int stacksize;
};
void initstack(struct sqstack &S);
void initarray(int array[20]);
int main()
{
struct sqstack S;
initstack(S);
printf("%d,%d\n",S.base,S.top);
int array[20];
initarray(array);
printf("%d,%d",S.base,S.top);
return 0;
}
void initstack(struct sqstack &S)
{
S.top=S.base=(int *)malloc(100*sizeof(int));
if(!S.base) { printf("error!\n");}
S.stacksize = 100;
}
void initarray(int array[20])
{
for(int i=1;i<=20;i++)
array[i]=0;
}
声明栈,构造栈,输出,栈的顶指针和底指针定义并构造数组后,再输出栈的顶指针和底指针,结果却不一样,输出结果如下:
1905632,1905632
0,1905632
即栈的底指针变成了0。百思不得其解,最后发现了自己犯了一个很低级的错误,数组越界,在给数组赋值的时候一不小心越界,于是就导致了这样,改正后:
#include<stdio.h>
#include<stdlib.h>
struct sqstack{
int *base;
int *top;
int stacksize;
};
void initstack(struct sqstack &S);
void initarray(int array[20]);
int main()
{
struct sqstack S;
initstack(S);
printf("%d,%d\n",S.base,S.top);
int array[20];
initarray(array);
printf("%d,%d",S.base,S.top);
return 0;
}
void initstack(struct sqstack &S)
{
S.top=S.base=(int *)malloc(100*sizeof(int));
if(!S.base) { printf("error!\n");}
S.stacksize = 100;
}
void initarray(int array[20])
{
for(int i=1;i<=19;i++)
array[i]=0;
}
输出:
12784608,12784608
12784608,12784608
之前一直说数组越界会导致一些不可名状的错误,之前一直不知道是什么,现在终于知道了,记录下来提醒自己