好的,我的代码有点问题。当我尝试运行它时,此错误显示。
Dywan.exe中0x012D4CBF处未处理的异常:0xC0000005:访问冲突读取位置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];
}
}
最佳答案
当dlboku
,y
和x
都类似于ROZMIAR - 2
时,以下
dane[x + dlboku][y + dlboku];
将使您可以访问
dane[ROZMIAR + ROZMIAR - 4][ROZMIAR + ROZMIAR - 4]
。您对代码有疑问。 ROZMIAR
的值很大,这使得它无法访问已分配的内存并崩溃。