访问冲突写入位置 C++ 0x02D1F000

Access Violation writing location C++ 0x02D1F000

我正在尝试通过一个数组进行初始化、填充和解析以确定其 "stability." 为了避免堆栈溢出,我决定创建动态数组。问题是,当涉及到填充数组时,我得到一个关于对随机位置的访问冲突的异常。我不知道它是在初始化中还是在填充数组时嵌套的 for 循环中。我似乎找不到任何错误,我的 classmates/TAs 也找不到。在此先感谢您的帮助! 我试过在 VS、XCode 和 g++ 中编译 我试过注释掉动态数组循环和删除循环,并尝试 "regular arrays",例如float array[x][y] 我仍然得到同样的错误。

#include <iostream>
#include <array>
#include <iomanip>
#include <cmath>
using namespace std;

int main() {
    int check = 0;
    int iteration = 0;
    int newIteration = 0;
    int newNewIteration = 0;
    int const DIMENSION = 1024;

    //Initializing the dynamic arrays in
    //heap to avoid a stack overflow

    float** firstGrid = new float*[DIMENSION];
    for (int a = 0; a < DIMENSION; ++a) {
    firstGrid[a] = new float[DIMENSION];
    }

    float** secondGrid = new float*[DIMENSION];
    for (int b = 0; b < DIMENSION; ++b) {
    secondGrid[b] = new float[DIMENSION];
    }

    float** thirdGrid = new float*[DIMENSION];
    for (int c = 0; c < DIMENSION; ++c) {
    thirdGrid[c] = new float[DIMENSION];
    }

    //Populating the arrays
    //All points inside first array
    for (int i = 0; i < DIMENSION; ++i) {
        for (int j = 0; i < DIMENSION; ++j) {
            firstGrid[i][j] = 0.0; //exception occurs here
        }
    }
    for (int i = 1; i < DIMENSION - 1; ++i) {
        for (int j = 1; i < DIMENSION - 1; ++j) {
            firstGrid[i][j] = 50.0;
        }
    }

    //Pre-setting second array
    for (int i = 0; i < DIMENSION; ++i) {
        for (int j = 0; i < DIMENSION; ++j) {
            secondGrid[i][j] = 0.0;
        }
    }
    for (int i = 1; i < DIMENSION - 1; ++i) {
        for (int j = 1; i < DIMENSION - 1; ++j) {
            secondGrid[i][j] = 50.0;
        }
    }

    //Pre-setting third array
    for (int i = 0; i < DIMENSION; ++i) {
        for (int j = 0; i < DIMENSION; ++j) {
            thirdGrid[i][j] = 0.0;
        }
    }
    for (int i = 1; i < DIMENSION - 1; ++i) {
        for (int j = 1; i < DIMENSION - 1; ++j) {
            thirdGrid[i][j] = 50.0;
        }
    }

    //Checking and Populating new arrays
    for (int p = 1; p < DIMENSION - 1; ++p) {
        for (int q = 1; q < DIMENSION - 1; ++p) {
            check = abs((firstGrid[p - 1][q] + firstGrid[p][q - 1] + firstGrid[p + 1][q] + firstGrid[p][q + 1]) / 4
            - firstGrid[p][q]);
            if (check > 0.1) {
                secondGrid[p][q] = (firstGrid[p - 1][q] + firstGrid[p][q - 1] + firstGrid[p + 1][q] + firstGrid[p][q + 1]) / 4;
                iteration = iteration + 1;
            }
        }
    }

    for (int p = 1; p < DIMENSION - 1; ++p) {
        for (int q = 1; q < DIMENSION - 1; ++p) {
            check = abs((secondGrid[p - 1][q] + secondGrid[p][q - 1] + secondGrid[p + 1][q] + secondGrid[p][q + 1]) / 4
            - secondGrid[p][q]);
            if (check > 0.1) {
                thirdGrid[p][q] = (secondGrid[p - 1][q] + secondGrid[p][q - 1] + secondGrid[p + 1][q] + secondGrid[p][q + 1]) / 4;
                newIteration = newIteration + 1;
            }
        }
    }

    for (int p = 1; p < DIMENSION - 1; ++p) {
        for (int q = 1; q < DIMENSION - 1; ++p) {
            check = abs((thirdGrid[p - 1][q] + thirdGrid[p][q - 1] + thirdGrid[p     + 1][q] + thirdGrid[p][q + 1]) / 4
                - thirdGrid[p][q]);
            if (check > 0.1) {
                newNewIteration = newNewIteration + 1;
            }
        }
    }

    //Deleting arrays and freeing memory
    for (int x = 0; x < DIMENSION; ++x) {
    delete [] firstGrid[x];
    }
    delete [] firstGrid;

    for (int x = 0; x < DIMENSION; ++x) {
    delete [] secondGrid[x];
    }
    delete [] secondGrid;

    for (int x = 0; x < DIMENSION; ++x) {
    delete [] thirdGrid[x];
    }
    delete [] thirdGrid;

    //iteration checking
    cout << iteration << endl << newIteration << endl << newNewIteration;
    if (iteration == 179 || newIteration == 179 || newNewIteration == 179) {
        return 0;
    }
    else {
        return 1;
    }
}

您应该在第二个 for 循环(发生错误的地方)中始终如一地使用 j

for(j=0; j < DIMENSION; j++)