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

你好,我是编程新手,我正在玩类来习惯它,但我发现当我在我的类中使用带有数组的循环时,我得到了这个错误 抛出未处理的异常:写访问冲突。 bunnies_array 是 0x5CB3CBA。

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;
    }

【问题讨论】:

    标签: c++ visual-c++


    【解决方案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]) 时,我会传递整个数组,但它会从一开始就传递下去哈哈哈,谢谢你真的帮了我很多
    • 函数不知道数组大小,这就是为什么你要么直接在循环条件中写入迭代次数,要么将大小作为参数传递并使用它。
    猜你喜欢
    • 2020-10-24
    • 2019-12-31
    • 2021-10-26
    • 2011-04-12
    • 2021-07-12
    • 1970-01-01
    • 2021-07-02
    • 2017-01-27
    • 2022-01-08
    相关资源
    最近更新 更多