c++ - 在不使用指针的情况下使用结构和数组的访问冲突

标签 c++ arrays struct visual-studio-2013 access-violation

所以我试图让这个程序在结构数组中获取一个结构数组,并为其分配一个 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;

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

Unhandled exception at 0x0002609B in ConsoleApplication2.exe: 0xC0000005: Access violation writing location 0x00000007.

我在结构中的数组中的结构中使用数组的原因是为了避免 <std::vector<std::vector<int>>或其他一些方法。我没有使用任何指针或取消引用运算符,所以我不确定它是如何导致它抛出的。

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

最佳答案

16 元素的合法索引是 [0, 15],而不是 [0, 16]。 因此,

for (int i = 0;i <= 16; i++)

应该改写成

for (int i = 0; i < 16; i++)

它也适用于 I 循环。

关于c++ - 在不使用指针的情况下使用结构和数组的访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479395/

相关文章:

c++ - 如何深入研究 shared_ptr [Netbeans、clang++、gdb]

javascript - 如何使用 lodash 返回匹配模式的属性数组

c++ - 将多个 vector 转换为数组,或返回它们 (c++)

c++ - 这个错误是什么意思: "error: expected specifier-qualifier-list before ' type_name'"?

c - 使用字段元素初始化指向结构的指针

c++ - 类模板特化可以利用非特化实现吗?

c++ - 如何通过重载 << 运算符打印出 vector 中的对象?

c++ - 多维数组c++

c# - 为什么结构需要装箱?

c++ - 如何访问在 try 语句中初始化的对象