数组越界带来的后果

上周写数据结构作业,遇到了一个奇怪的现象,涉及到图比较复杂,简化后就是如下的代码:

#include
#include 
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
#include 
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

之前一直说数组越界会导致一些不可名状的错误,之前一直不知道是什么,现在终于知道了,记录下来提醒自己

你可能感兴趣的:(数组越界带来的后果)