新程序员在这里,这个堆栈程序有什么问题?

时间:2015-06-24 16:16:07

标签: c struct

当我执行它时,该功能不起作用?

#include<stdio.h>

struct stack{

int x[10];

int last;
};

void init(struct stack *s)
{

    s->last=0;
}

 void insert(struct stack *s)
    {
        int a;

        while(a!=0)
        {
        int i;
        printf("Enter the value\n");

        scanf("%d",&i);

        s->last++;

        s->x[s->last]=i;
        printf("%d",s->x[s->last]);
        printf("enter 1 to continue 0 to exit\n");
        scanf("%d",&a);

    }
    }

int main()
{

    struct stack s;

    int y,z;

    printf("Trying out stacks\n");

    printf("\n______________\n");

    init(s);

    insert(s);

    return 0;

}

1 个答案:

答案 0 :(得分:2)

在函数insert()中,您声明了

int a;

然后在没有初始化a的情况下,您正在执行以下操作,

while(a!=0)

将提供Undefined Behaviour

以下行可能导致缓冲区溢出,

s->last++; 
s->x[s->last]=i; // no restriction applied on last

last可能超过9,导致缓冲区溢出为x[10]