0xC0000005:访问冲突写入位置c ++数组

sma*_*ajf 0 c++ arrays

我一直在使用c ++,并且出于某种原因,每次遇到在循环中访问的数组时,它都会一直给我这个错误消息,例如:

int i2 = 0;
for(int n=0; n<sizeof(mapy); n++)
{   
  xybar[i2] = mapx[n] * mapy[n];//
  xbar_squared[i2] = mapx[n] * mapx[n];//
  i2++;
}
Run Code Online (Sandbox Code Playgroud)

i2因为我意识到它不需要的原因是因为当我检查这些值时,我意识到迭代器n已经被替换为值2006而不是数组中的位置导致它在下一次调用时失败,因为它由于我的数组只包含500个数据,因此超出范围.我认为i2可能会解决这个问题,但事实并非如此.

Hri*_*iev 5

在此,我假设你的数组不是指针,例如,他们是sometype mapy[size]sometype *mapy.在这种情况下,sizeof运算符mapy以字节为单位返回整个数组的大小,而不是元素的数量.如果阵列是任何类型的,其大于1个字节(例如int,float,double等),则该代码将访问过去阵列并因此访问冲突异常的结束.您可以使用sizeof(mapy)/sizeof(mapy[0])相反来获取数组元素的数量.

  • `sizeof`技巧只有在`mapy`真正是一个数组时才有效,而不是一个指针(一个数组作为参数传递给一个函数总是变成一个,即使在声明参数时使用数组语法). (4认同)
  • 实际上,如果map是用户定义的类型,动态分配内存和/或包含额外数据(例如元素数量的计数器),`sizeof`也将失败. (2认同)