C语言程序能正常运行,但却报错堆栈周围数据损坏问题

问题遇到的现象和发生背景

在写函数装入栈后会发生报错,但是在vs上程序仍能正常运行

问题相关代码,请勿粘贴截图

传入了数组arr[50]
void push(stack* l1, stack* l2, char arr[])
{
int e = 0;
for (int i = 0; arr[i] != '='; i++)
{
int p, q, c, b;
p = arr[i];
if (p >= 48 && p <= 57)
{
q = p - 48;
(l1->top) = q;
l1->top++;
if (e == 42)//

{
l1->top--;
c = *(l1->top);
l1->top --;
b = *(l1->top);
*(l1->top) = c * b;
l1->top++;
e = 0;
}
if (e == 47)///
{
l1->top--;
c = *(l1->top);
l1->top --;
b = *(l1->top);
*(l1->top) = b / c;
l1->top++;
e = 0;
}
}
if (p == 43 || p == 45)//43->'+' 45->'-'
{
(l2->top) = p;
l2->top++;
}
if (p == 42 || p == 47)//42->'
' 47->'/'
e = p;

}

}

运行结果及报错内容

Run-Time Check Failure #2 - Stack around the variable 'l1' was corrupted.

我的解答思路和尝试过的方法

以为是数组超出大小曾试过更改判断条件,但是
没能解决

我想要达到的结果

报错消失