Run-Time Check Failure #2 – Stack around the variable was corrupted

C语言 码拜 9年前 (2015-10-20) 1312次浏览
#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;
}

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

程序如上所示,一个简单的静态顺序表,出问题了。

网上说是由于数组越界或被破坏造成的,可是tmp变量就不是数组啊!就取了下它的地址

如果是被破坏,又是怎么被破坏的呢?

解决方案:20分
scanf(“%d”, &tmp); tmp明明是char类型却要充当int, 那句错误信息说得很清楚吧
解决方案:20分
不管是不是数组,你访问的内容超过了变量的长度,就会发生越界。
tmp 是一个 char, 只有 1 个字节大小。 scanf(“%d”  中 %d 对应的是 int,它会访问传入的地址开始的 4 个字节的内容,你只有 1 个字节,访问就越界了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Run-Time Check Failure #2 – Stack around the variable was corrupted
喜欢 (0)
[1034331897@qq.com]
分享 (0)