抛出未处理的异常:写访问冲突。 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(&bunnies_array)[100]
的引用,并将其与数组地址 &bunnies_array
混合在一起。
【讨论】:
一个建议:既然你的 change(int[]) 函数不需要返回任何东西,为什么不把它设为 void 而不是 int? 要详细说明@S.M. 的响应,您需要记住,当您将数组传递给函数时,您实际上是在传递一个指向第一个元素地址的(常量)指针数组本身。每个后续元素都放置在数组存储的对象或变量的大小(以字节为单位)乘以其位置。因此,为了调用该函数,您有两个选择:1)传递指针本身,例如我的函数(arr); 2)传递数组的第一个元素的地址,例如myFunction(&arr[0]); 哦,我想当我传递例如 function((&arr)[0]) 时,我会传递整个数组,但它会从一开始就传递下去哈哈哈,谢谢你真的帮了我很多 函数不知道数组大小,这就是为什么你要么直接在循环条件中写入迭代次数,要么将大小作为参数传递并使用它。以上是关于抛出未处理的异常:写访问冲突。 bunnies_array 是 0x5CB3CBA的主要内容,如果未能解决你的问题,请参考以下文章
抛出未处理的异常:读取访问冲突。 x 是 0x20B4112