【问题标题】:what does "Access violation writing location 0x000000FBA47E0000." mean [closed]\"访问冲突写入位置 0x000000FBA47E0000.\" 是什么意思 [关闭]
【发布时间】:2023-02-22 01:38:51
【问题描述】:

我在大学第一年的编码课上遇到了这个错误,我的老师没有帮助,想知道是否有人可以帮助解释发生了什么。

“在 randomarray.exe 中的 0x00007FF695CF4C6E 抛出异常:0xC0000005:访问冲突写入位置 0x000000FBA47E0000。”

它是一个超级简单的程序,只是为 10 位数组的每个值分配一个随机数,我对一般编码非常陌生,所以我完全迷路了。

完整代码:

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
    int result[10];

    for (int i = 0; 1 <= 10; i++)
    {
        result[i] = rand();

    }

}

我尝试将 result[10] 从 int、double、long 更改为老实说我完全迷失了我什至不完全理解它说的问题是什么,更不用说如何解决它了。

【问题讨论】:

  • 1 &lt;= 10 总是正确的。循环是无限的,这是未定义的行为。
  • 你超出了数组的范围。记住 int result[10] 只能访问 0 到 9。在这里你吹方式过了最后并最终写信给不属于你的记忆,因此是“访问冲突”。
  • 有两个错别字:1 -> i&lt;= -> &lt;。或者您可以使用基于现代范围的 for 循环:for(auto&amp; x : result) x = rand();

标签: c++


【解决方案1】:

该错误意味着您试图写入/读取不属于该程序的内存。

int result[10]
// this means you have 10 indexes to read or write. result[0], result[1],
// result[2], result[3], result[4], result[5], result[6], result[7]
// result[8], result[9]

但是在这条线上

 // I think you meant to write i <=10
 for (int i = 0; 1 <= 10; i++)
 {
    result[i] = rand();

但即便如此,此代码仍将执行到“i”等于 10,并且您的程序将尝试读取 result[10]。该内存不属于您的程序。

【讨论】:

    【解决方案2】:

    “访问冲突”意味着您访问了无效内存,或者以不应该访问的方式访问了不常访问的内存。

    你的代码是一个无限循环,1 总是小于 10,我想你的意思是让 1 成为 i。

    因为循环无限期地运行,并且 i 每次都递增,最终您尝试设置不可访问的内存。

    【讨论】:

      猜你喜欢
      • 2013-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 2020-09-04
      • 2012-12-05
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多