#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#define MAX_SIZE 10
typedef struct _Que{
char value[MAX_SIZE];
char head, tail, count;
} Que;
void initQ(Que * q)
{
char i;
for (i = 0; i < MAX_SIZE; i++)
{
q->value[i] = 0;
}
q->head = q->tail = q->count = 0;
}
char isEmpty(Que * q)
{
if(q->count==0&&q->head==q->tail) return 1;
else return 0;
}
char isFull(Que * q)
{
if(q->count!=0&&q->head==q->tail) return 1;
else return 0;
}
char enQ(Que * q, char value)
{
if(isFull(q)) return 0;
q->value[q->head] = value;
q->head++;
if(q->head==MAX_SIZE) q->head = 0;
q->count++;
return 1;
}
char deQ(Que * q, char * value)
{
if(isEmpty(q)) return 0;
*value = q->value[q->tail];
q->tail++;
if(q->tail==MAX_SIZE) q->tail = 0;
q->count--;
return 1;
}
int main()
{
Que q;
char tmp,i;
initQ(&q);
for(i=0;i<4;i++)
{
scanf("%d", &tmp);
enQ(&q, tmp);
}
while(!isEmpty(&q))
{
deQ(&q, &tmp);
printf("%d\n", tmp);
}
return 0;
}

程序如上所示,一个简单的静态顺序表,出问题了。
网上说是由于数组越界或栈被破坏造成的,可是tmp变量就不是数组啊!就取了下它的地址?
如果是栈被破坏,又是怎么被破坏的呢?
解决方案:20分
scanf(“%d”, &tmp); tmp明明是char类型却要充当int, 那句错误信息说得很清楚吧
解决方案:20分
不管是不是数组,你访问的内容超过了变量的长度,就会发生越界。
tmp 是一个 char, 只有 1 个字节大小。 scanf(“%d” 中 %d 对应的是 int,它会访问传入的地址开始的 4 个字节的内容,你只有 1 个字节,访问就越界了。
tmp 是一个 char, 只有 1 个字节大小。 scanf(“%d” 中 %d 对应的是 int,它会访问传入的地址开始的 4 个字节的内容,你只有 1 个字节,访问就越界了。