运行出现Stack around the variable ’arr’ was corrupted.问题所在以及解决方法

本文主要是介绍运行出现Stack around the variable ’arr’ was corrupted.问题所在以及解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先来看一下我的代码: 

#include <stdio.h>
void bubbleSort(int arr1[], int len)
{for (int a = 0; a < len - 1; a++){for (int b = 0; b <= len - 1 - a; b++){if (arr1[b] > arr1[b + 1]){int temp = arr1[b];arr1[b] = arr1[b + 1];arr1[b + 1] = temp;}}}
}int main()
{int n = 0;int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};n = sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, n);for (int m = 0; m < n; m++){printf("%d ", arr[m]);}return 0;
}

这个代码是用c语言写的冒泡排序。

下面是运行结果:

 接下来我们看一下Stack around the variable ’arr’ was corrupted的中文翻译:变量‘ arr’周围的堆栈已损坏

可以知道是栈周围出现了问题,这时我们应该着重看是否出现栈的溢出,仔细检查我们定义arr数组部分,可知系统给arr数组分配了10个整数的存储空间,arr[0~~9]。而在上面的代码中,问题出现在冒泡排序的内循环中,当b的值等于len - 1 - a时,系统会尝试访问arr1[b + 1],实例来说上述代码当a=0时,b的值为9,b+1就为10,那么在这次运行访问中系统就要访问arr[10]的空间,而我们定义的arr数组没有开辟arr[10]这一空间,这就对应着数组出现了越界访问。

修改的话就很简单了,把第六行的代码改成

for (int b = 0; b < len - 1 - a; b++)

即把 <= 改成 < 就OK了,下面是正确代码:

#include <stdio.h>
void bubbleSort(int arr1[], int len)
{for (int a = 0; a < len - 1; a++){for (int b = 0; b < len - 1 - a; b++){if (arr1[b] > arr1[b + 1]){int temp = arr1[b];arr1[b] = arr1[b + 1];arr1[b + 1] = temp;}}}
}int main()
{int n = 0;int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};n = sizeof(arr) / sizeof(arr[0]);bubbleSort(arr, n);for (int m = 0; m < n; m++){printf("%d ", arr[m]);}return 0;
}

希望对你有所帮助!

这篇关于运行出现Stack around the variable ’arr’ was corrupted.问题所在以及解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/221098

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

mybatis和mybatis-plus设置值为null不起作用问题及解决

《mybatis和mybatis-plus设置值为null不起作用问题及解决》Mybatis-Plus的FieldStrategy主要用于控制新增、更新和查询时对空值的处理策略,通过配置不同的策略类型... 目录MyBATis-plusFieldStrategy作用FieldStrategy类型每种策略的作

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

Python Jupyter Notebook导包报错问题及解决

《PythonJupyterNotebook导包报错问题及解决》在conda环境中安装包后,JupyterNotebook导入时出现ImportError,可能是由于包版本不对应或版本太高,解决方... 目录问题解决方法重新安装Jupyter NoteBook 更改Kernel总结问题在conda上安装了

Goland debug失效详细解决步骤(合集)

《Golanddebug失效详细解决步骤(合集)》今天用Goland开发时,打断点,以debug方式运行,发现程序并没有断住,程序跳过了断点,直接运行结束,网上搜寻了大量文章,最后得以解决,特此在这... 目录Bug:Goland debug失效详细解决步骤【合集】情况一:Go或Goland架构不对情况二:

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工