使用结构和数组访问冲突而不使用指针

Joe*_*hor 0 c++ arrays struct access-violation visual-studio-2013

所以我试图让这个程序在结构数组中采用一个struct数组,并为它分配一个1-9的随机数

struct multiDim
{
    int t[16];
};
struct multi
{
    multiDim t[16];
};
multi generate()
{
    multi m;
    srand(time(NULL));
    for (int i = 0;i <= 16; i++)
    {  
        for (int I = 0;I <= 16;I++)
        {
        int ii = rand();
        ii = ii % 10;
        if (ii <= 9)
        {
            m.t[i].t[I] = ii;
        }
    }
}
return m;
Run Code Online (Sandbox Code Playgroud)

}

当我尝试使用Visual Studio 2013编译它时,当我尝试返回m时,它会导致错误,说明

ConsoleApplication2.exe中0x0002609B处的未处理异常:0xC0000005:访问冲突写入位置0x00000007.

我在结构中的数组中使用数组的原因是因为要避免<std::vector<std::vector<int>>或者使用其他方法.我没有使用任何指针或解除引用操作符,所以我不确定它是如何导致它抛出的.

但是,在运行pocketcpp的另一台计算机上,我能够成功编译并执行它,但只删除了stdafx.h文件,因为它只适用于Visual Studio实例.编译器没有正确执行的任何原因?

tim*_*rau 5

16个元素的合法索引是[0,15],而不是[0,16].从而,

for (int i = 0;i <= 16; i++)
Run Code Online (Sandbox Code Playgroud)

应该改写成

for (int i = 0; i < 16; i++)
Run Code Online (Sandbox Code Playgroud)

它也适用于I循环.