c++ - 未处理的异常 : Access violation reading location 0x015E2348

标签 c++ arrays visual-studio loops

好的,我的代码有点问题。当我尝试运行它时显示此错误。

Unhandled exception at 0x012D4CBF in Dywan.exe: 0xC0000005: Access violation reading location 0x015E2348.

当 ROZMIAR=257 或更少时,代码可以正常工作。但我需要设置更高的值,如 500。错误停留在 double odcien = dane[x][y] + dane[x + dlboku][y] + dane[x][y + dlboku] + dane[x + dlboku][y + dlboku]; 我应该为此使用动态数组吗?

double dane[ROZMIAR][ROZMIAR];
double wartoscinit = 0.0;
dane[0][0] = dane[0][ROZMIAR - 1] = dane[ROZMIAR - 1][0] = dane[ROZMIAR -1][ROZMIAR - 1] = wartoscinit;`

void comp_Fractal(){
for (int dlboku = ROZMIAR - 1; dlboku >= 2; dlboku /= 2, h /= 2.0)  {
    int polboku = dlboku / 2;
    for (int x = 0; x<ROZMIAR - 1; x += dlboku) {
        for (int y = 0; y<ROZMIAR - 1; y += dlboku) {

            double odcien = dane[x][y] + dane[x + dlboku][y] + dane[x][y + dlboku] + dane[x + dlboku][y + dlboku];

            odcien /= 4.0;

            double wzor = (-h) + rand() * (2*h) / RAND_MAX;
            dane[x + polboku][y + polboku] = odcien + wzor;

        }
    }
    for (int x = 0; x<ROZMIAR - 1; x += polboku) {
        for (int y = (x + polboku) % dlboku; y<ROZMIAR - 1; y += dlboku) {


            double odcien =
                dane[(x - polboku + ROZMIAR) % ROZMIAR][y] +
                dane[(x + polboku) % ROZMIAR][y] +
                dane[x][(y + polboku) % ROZMIAR] +
                dane[x][(y - polboku + ROZMIAR) % ROZMIAR];

            odcien /= 4.0;

            double wzor = (-h) + rand() * (2*h) / RAND_MAX;
            odcien = odcien + wzor;

            dane[x][y] = odcien;

            if (x == 0) dane[ROZMIAR - 1][y] = odcien;
            if (y == 0) dane[x][ROZMIAR - 1] = odcien;
        }
    }
}

for (int i = 0; i<ROZMIAR - 1; i++)
    for (int j = 0; j<ROZMIAR - 1; j++) {
        if (dane[i][j] > maxY)
            maxY = dane[i][j];
        if (dane[i][j] < minY)
            minY = dane[i][j];
    }

最佳答案

dlbokuyx 都类似于ROZMIAR - 2 时,如下

dane[x + dlboku][y + dlboku];

将使您访问超出范围的 dane[ROZMIAR + ROZMIAR - 4][ROZMIAR + ROZMIAR - 4]。您的代码总是有问题。它只是 ROZMIAR 的大值导致它访问分配的内存不足并崩溃。

关于c++ - 未处理的异常 : Access violation reading location 0x015E2348,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34252133/

相关文章:

c++ - 无法链接到 Windows 7 上的 Visual Studio 2013 中的 boost 1.60 线程库

javascript - array.push() 但数组中没有结果?

c# - Settings.settings 与 app.config?

c# - nuget 包管理器版本问题 VS 2013

c++ - 是什么给了 std::future 一些共享状态

javascript - 插入数组

arrays - 有没有更好的方法让 numpy.argmin() 忽略 NaN 值

c++ - 使用图像像素

c++ - 具有不同参数的继承类构造函数的术语是什么?

c++ - 打印 float 的精确值