抛出未处理的异常:写访问冲突。 bunnies_array 是 0x5CB3CBA

Posted

技术标签:

【中文标题】抛出未处理的异常:写访问冲突。 bunnies_array 是 0x5CB3CBA【英文标题】:Unhandled exception thrown: write access violation. bunnies_array was 0x5CB3CBA 【发布时间】:2018-06-13 05:46:49 【问题描述】:

你好,我是编程新手,我正在玩类来习惯它,但我发现当我在我的类中使用带有数组的循环时,我得到了这个错误 。

bunny.h   

     #pragma once
        #include <iostream>

        class bunny 
        public:
            int change(int(&bunnies_array)[100]);

        ;

bunny.cpp

    #include "bunny.h"

    int bunny::change( int(&array)[100])
    

        for ( int i = 0; i < 100; i++)
        
            array[i] = 1;
        

        return 0;
    

main.cpp

    #include "bunny.h"

    int main()
    
         int bunnies_array[100];

        bunny trail;

        trail.change((&bunnies_array)[100]);
        std::cout << bunnies_array[0];
        return 0;
    

【问题讨论】:

【参考方案1】:

换行

trail.change((&bunnies_array)[100]);

trail.change(bunnies_array);

初始行从数组边界上方的第 100 个开始传递数组元素。我想您误解了对数组声明 int(&amp;bunnies_array)[100] 的引用,并将其与数组地址 &amp;bunnies_array 混合在一起。

【讨论】:

一个建议:既然你的 change(int[]) 函数不需要返回任何东西,为什么不把它设为 void 而不是 int? 要详细说明@S.M. 的响应,您需要记住,当您将数组传递给函数时,您实际上是在传递一个指向第一个元素地址的(常量)指针数组本身。每个后续元素都放置在数组存储的对象或变量的大小(以字节为单位)乘以其位置。因此,为了调用该函数,您有两个选择:1)传递指针本身,例如我的函数(arr); 2)传递数组的第一个元素的地址,例如myFunction(&arr[0]); 哦,我想当我传递例如 function((&arr)[0]) 时,我会传递整个数组,但它会从一开始就传递下去哈哈哈,谢谢你真的帮了我很多 函数不知道数组大小,这就是为什么你要么直接在循环条件中写入迭代次数,要么将大小作为参数传递并使用它。

以上是关于抛出未处理的异常:写访问冲突。 bunnies_array 是 0x5CB3CBA的主要内容,如果未能解决你的问题,请参考以下文章

抛出未处理的异常:读取访问冲突。 x 是 0x20B4112

C++ Battle4Zion 项目抛出未处理的异常:读取访问冲突。 **this** 是 nullptr。发生了

在 TPL 中快速抛出未处理的异常

Xcode升级后iOS项目抛出未处理的异常

抛出异常:写访问冲突 C++

Visual C ++ - 从设置表单图标中抛出未处理的异常?