错误:Stack around the variable ‘ ‘ was corrupted.

作者在阅读《明解C语言》时遇到代码错误,发现未明确数组大小导致堆栈区破坏。通过修改代码定义数组大小后,解决了问题并发现此问题在其他类型的数据结构中也存在。
摘要由CSDN通过智能技术生成

我在看《明解C语言》这本书是发现了一个很有意思的代码,当我正在重复上述代码时发现了这个错误,我认为是我在模仿这个代码是中途出了问题,直到我核对一遍遍之后,发现并没有什么太大的差距。
以下是出错代码

//输入一个学生表(序号+姓名)
//并输出一个及格表
#include<stdio.h>
#define n 2
int main()
{
	int arr[] = { 0 };//存放学生成绩
	int arr1[] = { 0 };//存放及格成绩
	int sum = 0;//作为及格人数的下标
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%d号:",i+1);
    	scanf("%d", &arr[i]);
	}
	for (i = 0; i < n; i++)
	{
		if(arr[i]>= 60)
		{
			arr1[sum] = i;
			sum++;
		}
	}
	for (i = 0; i < sum; i++)
	{
		printf("%d号 %d ", arr1[i] + 1, arr[arr1[i]]);
	}
	return 0;
}

在这里插入图片描述

于是我陷入了沉思,看到Stack around the variable ‘arr’ was corrupted.这句报错是他说正在从数组中读取无效值,我刚开始认为是scanf没有正常读入数据,经过我编译后,并不是这样的。翻译错误后才明白,这句话的意思是某变量周围的堆栈区被破坏,问题的根本原因就是没有明确指出数组大小,这个时候计算机自动识别并分配存储空间,要对两个数组进行拼接,就导致先开辟的空间不够用,所以会就会破坏原变量周围的堆栈区。
经过检查我确实没有定义数组的大小,只是初始化,当我定义了数组大小后,发现代码能正常运作。

//输入一个学生表(序号+姓名)
//并输出一个及格表
#include<stdio.h>
#define n 2
int main()
{
	int arr[n] = { 0 };//存放学生成绩
	int arr1[n] = { 0 };//存放及格成绩
	int sum = 0;//作为及格人数的下标
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%d号:",i+1);
        scanf("%d", &arr[i]);
	}

	for (i = 0; i < n; i++)
	{
		if(arr[i]>= 60)
		{
			arr1[sum] = i;
			sum++;
		}
	}
	for (i = 0; i < sum; i++)
	{
		printf("%d号 %d ", arr1[i] + 1, arr[arr1[i]]);
	}
	return 0;
}

在这里插入图片描述
经过我浏览其他人的问题发现,不止数组会出现这种状况,字符串也会出现。

这是《明解C语言》原书的代码,比我实际写出要更简洁一些:
代码来源《明解C语言》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值