数组越界带来的后果

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

#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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值