#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 个字节,访问就越界了。