为什么我会遇到访问冲突的运行时错误?

时间:2014-02-15 17:42:44

标签: c++ arrays iteration runtime-error

我想在二维数组上对角迭代。我使用[N*N]大小的普通数组,而不是使用[N][N]数组。之后,我生成索引。 这是我要打印的数组(例如)

1 3 6 10
2 5 9 13
4 8 12 15
7 11 14 16

结果应该是这样的:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16

我已完成以下代码:

int n, temp[2], nums[100 + 10];
cin >> n;
for (int i = 0; i < n * n; i++)
    cin >> nums[i];

temp[0] = temp[1] = 0;
for (int i = 0, cnt = 0; i < n; i++, cnt += 5) {
    temp[1] = temp[0];
    for (int j = 0; j <= i; j++) {
        cout << nums[temp[1]] << " ";
        temp[1] -= n - 1;
    }
    temp[0] += n;
}

temp[0] -= n - 1;
for (int i = n - 2, cnt = temp[0]; i >= 0; i--, cnt -= 5) {
    temp[1] = temp[0];
    for (int j = 0; j <= i; j++) {
        cout << nums[temp[1]] << " ";
        temp[1] -= n - 1;
    }
    temp[0] += 1;
}

我认为它应该可以工作,但我不知道为什么我会遇到访问冲突的运行时错误。 感谢。

3 个答案:

答案 0 :(得分:1)

在您的链接1 ≤ N ≤ 100中,这意味着nums数组应该能够存储最多100 * 100 = 10000个值。

答案 1 :(得分:1)

反正: 该网站声明1&lt; = N&lt; = 100 ,这意味着您需要的最大阵列是 max(N*N),即10,000个整数。您发布的代码已经为110个整数元素分配了数组,这显然是不够的。 在第一个for循环中读取输入数字时可能会发生访问冲突,因为i转到n*n,这可能大于数组的大小。

答案 2 :(得分:0)

首先是我的朋友,你使用哪个编译器? 如果是borland的turbo,那么你可能想切换到另一个,因为这是我经历过的常见错误。 你的代码似乎是正确的,通过在Code :: Blocks中执行相同的代码(copy-pasting),我得到了你提到的输出。所以,你的程序是正确的。