【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】

这篇具有很好参考价值的文章主要介绍了【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题场景:

  在我们编写c语言程序时,尤其是使用数组进行编写时,通常会遇到一种令我们猝不及防的报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted,如图:

【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】,android

 


问题描述

  相信很多小伙伴遇到这个问题时都会和当时的我一样懵,奇葩的是这个程序明明可以成功运行且结果无误,但为什么在出结果的同时会弹出报错窗口呢?不要着急,我在这里可以为大家献上我的锦薄之力,以下是我个人遇到的此类报错出现的原因、代码场景以及解决办法:

1.此类报错出现的原因通常是数组内存越界

内存越界我遇到过两种情景:

(1)声明数组时没有规定数组元素个数的大小:

【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】,android

  这里由于某些原因未能给大家呈现完整的代码,但大家只需要知道图中rev_intary函数的功能是将数组的所有元素倒序排列,而函数intary_rcpy是将一个数组的所有值赋给另一个数组对应的元素,

在main函数中,我设了这样两个数组导致出现报错:int m[]={5,6,8,9};int n[];

很明显我这两个数组都没有标明数组大小,但实际上问题是出在第二个数组上,因为数组m在初始化为{5,6,8,9}时,程序会根据我初始化的个数来自动确定数组m的大小为4,我在main函数中应用了函数intary_rcpy(m,n,4);这会使数组m的各个元素值储存到数组n当中,但由于数组n的大小我没有给出声明,导致栈溢出。

正确的做法只要给数组规定一个大小就行了:int [4];当我这样设出n时,就不再出现报错了。

针对这类情景,总结如下

以下讲解来自chatgpt:

当你声明一个数组时,如果没有指定数组的大小,编译器无法知道需要为数组分配多少内存空间。如果你在声明数组后使用它,并且在使用过程中写入超出数组分配的空间范围的数据,就会导致栈溢出。

在C/C++中,数组是在栈上分配的,它们的大小在编译时确定。如果你声明一个没有指定大小的数组,编译器无法为其分配足够的内存空间。因此,当你尝试向未分配足够空间的数组中写入数据时,就会发生栈溢出错误。

要解决这个问题,你需要在声明数组时指定合适的大小,以确保分配足够的内存空间来存储你要使用的数据。例如,可以声明一个足够大的数组来存储密码,并确保不要超出数组范围进行读写操作。另外,还可以考虑使用动态内存分配函数(如malloc()或new)来在堆上分配内存。这样,你可以根据需要动态调整内存大小,从而避免栈溢出问题。
————————————————
版权声明:本文为CSDN博主「王三召」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_52918245/article/details/132117781

(2)数组下标越界:

下面是一段此类错误的代码

【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】,android

  乍一看没有问题,实际上,我们仔细观察,在for循环这里出现了问题,我们在声明数组arr时明确了元素个数为5,因此arr的元素下标应该是从0-4,但在for循环中,我们居然让i增加到了5,也就是说,我在最后访问了arr[5],这就导致我越界了,因为arr数组只开辟了5个整型数据元素的空间,即arr数组的可访问元素下标范围在0-4之间for循环的最后一次循环明显越界访问了下标为5的元素(即第6个元素).

因此会导致编译器报错"Run-Time Check Failure #2 - Stack around the variable 'arr2' was corrupted."

2.编译器本身问题

刚才说过,此类报错的原因通常是内存越界,但也有例外,我最近就碰到了这个例外。

【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】,android【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】,android

这里我所设的函数都是关于动态二维数组的,main函数里我的二维数组也都明确了数组大小,我左看右看也没看出哪里出现了越界,于是我就到网上搜寻网友们的方案,找到了两种可行的解决方法:

 1).把“project->配置属性->c/c++->代码生成->基本运行时检查 设置为默认值。                               2).创建数组的方式改用new或者malloc,改为正常运行

【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】,android

3.总结:

发生此报错一般有两种情况:

        第一 -> 数组下标越界。这也是最常见的问题原因,解决办法是检查数组是否有越界情况,如果有的话创建一个更大的数组

        第二->声明时未规定数组大小。

       第三->编译器本身的问题。(在前两种情况不适用时考虑编译器问题。)文章来源地址https://www.toymoban.com/news/detail-760192.html

到了这里,关于【关于[C]报错:Run-Time Check Failure #2 - Stack around the variable ‘xxx‘ was corrupted的示例及解决办法】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 报错:To see the full stack trace of the errors, re-run Maven with the -e switch.

    目录 报错信息: 报错场景: 报错原因:  解决方法: [ERROR] Java heap space - [Help 1] [ERROR]  [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR]  [ERROR] For more information about the errors and possible solutions, please

    2024年02月07日
    浏览(42)
  • 电脑蓝屏:KERNEL_SECURITY_CHECK_FAILURE 分析

    此KERNEL_SECURITY_CHECK_FAILURE bug 检查的值为 0x00000139。 此 bug 检查指示内核检测到关键数据结构损坏。 引起电脑蓝屏问题的topsecpf.sys,删除 LIST_ENTRY损坏可能难以跟踪,并且此 bug 检查指示在将单个列表条目元素添加到列表或从列表中删除单个列表项元素或从列表中删除时 (已对双

    2024年02月11日
    浏览(27)
  • 程序发生run time error原因及解决方案

    属于运行时错误, 当程序运行到一半,程序发生崩溃。 1 、数组过小 2 、除数为零 3、 大数组定义在函数内 4、 指针越界 5、 还有可能是程序抛出了未接收的异常, 原因 数组过小,导致程序访问到数组外的内存区域 解决方案 适当增大数组容量 原因 除数为零, 发生除零错

    2024年02月15日
    浏览(68)
  • Python中os.system()、subprocess.run()、call()、check_output()的用法

    os.system() 是对 C 语言中 system() 系统函数的封装,允许执行一条命令,并返回退出码(exit code),命令输出的内容会直接打印到屏幕上,无法直接获取。 示例: Python 3.5 开始推荐使用这个方法执行命令,其原型如下: 其中: args: 可以是一个字符串(当 shell=True 时),也可以

    2024年02月12日
    浏览(30)
  • 【node.js】关于node.js,如何解决npm should be run outside of the Node.js REPL, in your normal shell报错?

    前言,安装node方式采用的是安装包解压的 报如下错误: npm should be run outside of the Node.js REPL, in your normal shell 在windows环境下安装完node,其目录结构下会有一个node.exe文件,运行该工具就相当于在cmd中执行node命令,即进入node开发模式。 产生这个错误的原因是你将npm命令运行在

    2024年02月03日
    浏览(39)
  • 【flutter doctor HTTP host常见报错】HTTP Host availability check is taking a long time...

    HTTP Host availability check is taking a long time…[!] HTTP Host Availability HTTP host “https://maven.google.com/” is not reachable. Reason: An error occurred while checking the HTTP host: 信号灯超时时间已到 1、找到flutter sdk的文件目录,依次找到flutter/packages/flutter_tools/lib/src/http_host_validator.dart文件 2、将https://

    2024年02月12日
    浏览(39)
  • python subprocess.run()、subprocess.Popen()、subprocess.check_output()(执行系统命令、启动新的进程、连接到子进程的输入/输出管道)

    Python的subprocess模块是用于创建和管理子进程的模块。它提供了一种在Python中调用外部命令的方式,可以执行系统命令、启动新的进程、连接到子进程的输入/输出管道等。 subprocess.run 运行指定的命令,并等待其完成。args参数是一个字符串或列表,表示要执行的命令和参数。

    2024年02月09日
    浏览(41)
  • 【Debian】报错:su: Authentication failure

            今天我重新刷了一个debian系统。 系统版本: 我的系统版本: No LSB modules are available. Distributor ID:Debian Description: Debian GNU/Linux 12 (bookworm) Release:12 Codename:bookworm         在使用su 进入 root系统的时候报错。          su: Authentication failure         输入以上的命

    2024年02月07日
    浏览(34)
  • 关于系统时间的一些time库函数

    (꒪ꇴ꒪ ),hello我是 祐言 博客主页:C语言基础,Linux基础,软件配置领域博主🌍 快上🚘,一起学习! 送给读者的一句鸡汤🤔: 集中起来的意志可以击穿顽石! 作者水平很有限,如果发现错误,可在评论区指正,感谢🙏          编程中经常用到时间表达及转换的函数,它们

    2024年02月15日
    浏览(28)
  • 关于docker.service: main process exited, code=exited, status=1/FAILURE问题的解决

    环境:centos7 问题:重装完docker后,使用systemctl restart/start docker命令时,报了下面一个错误。 然后百度上面各种答案。比如使用   vi  /etc/sysconfig/docker  命令然后修改文件中的--selinux-enabled=false,但是我发现我打开文件后其实是空白的,貌似是20版本的docker不支持这种修改方式

    2024年02月12日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包