设为首页 加入收藏

TOP

无意间溢出修改变量值
2014-11-24 00:33:05 来源: 作者: 【 】 浏览:22
Tags:无意间 溢出 改变 量值

#include
#include
using namespace std;

const MAXSIZE = 100;
typedef struct tagArray
{
int len;
int num[MAXSIZE];
}Array;


int isMax(int n1,int n2)
{
switch(n1)
{
case '+':return 0;break;
case '-':return 0;break;
case '*':
if(n2 == '+'||n2 == '-')
return 1;
else
return 0;
break;
case '/':
if(n2 == '+'||n2 == '-')
return 1;
else
return 0;
break;
default:
cout<<"语法错误"< exit(1);
break;
}
}
int main()
{
/**//////////////////////
int st[MAXSIZE] = {0};
int top = -1;
//简单的栈用于保存运算符
/**//////////////////////
Array ay;
memset(&ay,0,sizeof(ay));
//cout<<"大小是多少"< //一个存放输去的缓冲
/**/////////////////////////

int scr[] = {6,'*',4,'-',2,'+',5,'/',2};
const int len = 8;
int ErrorFlag = 0;
for(int i = 0; i < len; i++)
{
if(scr[i]=='+'||scr[i] == '-' || scr[i] == '*' || scr[i] == '/')
{
if(/**//*top == -1 ||*/ isMax(scr[i],st[top]))
{
//栈定元素级别比当前元素要小的时候 把当前运算符压入栈
st[++top] = scr[i];
}
else
{
//栈顶元素级别比当前元素要大的时候 栈顶元素弹出栈 输入到输出缓冲中去 并把当前元素符压入栈
ay.num[ay.len++] = st[top--]; //放到输出缓冲去
st[++top] = scr[i];
}
if(!ErrorFlag)
{
cout<< "-----------------------溢出发送错误-----------------"< cout< //估计原因是函数调用会保存参数变量的时候 一些溢出 真好产生这样会的错误
//这个懂汇编的话就可能很好解释了。。。。。。
ErrorFlag = !ErrorFlag;
//这和/*top == -1 ||*/ 一结合 竟然把top 的值进行修改 我还是第一次真正的遇到这个问题
//数组的边界溢出导致出这样的问题。 有机会要好好研究一下溢出啊。
// 所以c语言的数组不够好,没有边界的检测 这样写大型程序时候程序出现异常
//st[-1] 地址其实top 的地址 。。
}
}
else
{
//是数字 输入到输出缓冲
ay.num[ay.len++] = scr[i];
//cout< }
}

if(top==-1)
{
cout<<"非法数据"< exit(1);
}
cout<<"数组的大小"< cout<<"top "< //把栈的元素全部输入缓冲去
do
{
ay.num[ay.len++] = st[top--];
} while (top!=-1);
cout<<"数组的大小"< for(int k = 0; k < ay.len; k++)
{
if(ay.num[k] == '+'||ay.num[k] == '-'||ay.num[k] == '*'||ay.num[k] == '/')
{
printf(" %c",ay.num[k]);
}
else
{
cout<<" "< }
}
return 0;
}

作者 小鱼儿

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C/C++ on Liunx platform第四篇:.. 下一篇引入中间变量使程序更易读

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: