c - 数组值无故改变

标签 c arrays debugging

这是我的 Project Euler: Problem 11 代码

int main(int argc, char** argv) {
char stevila [1600] = "08022297381500400075040507785212507791084949994017811857608717409843694804566200814931735579142993714067538830034913366552709523046011426924685601325671370236912231167151676389419236542240402866331380244732609903450244753353783684203517125032988128642367102638406759547066183864706726206802621220956394396308409166499421245558056673992697177878968314883489637221362309750076442045351400613397343133957817532822753167159403800462161409535692163905429635314755588824001754243629855786560048357189070544443744602158515417581980816805944769287392138652177704895540045208839735991607975732162626793327986688366887576220720346336746551232639353690442167338253911249472180846293240627636206936417230238834629969826759857404361620733529783190017431497148868116235705540170547183515469169233486143520189196748";
int stevilaGrid [20][20];
int stevilaRacunanje[4][4];
int stevecPoStevilih = 0;
for (int i = 0; i < 20; i++) {
    for (int j = 0; j < 20; j++) {
        stevilaGrid[i][j] = (stevila[stevecPoStevilih] - 48)*10 + stevila[stevecPoStevilih + 1] - 48;
        stevecPoStevilih += 2;
    }
}

int rezultat [10];
int najvecji = 0;
int trenutni;
int temp = 0;
for (int i = 0; i < 17; i++) {
    for (int j = 0; j < 17; j++) {

        //problems start here
        for (int k = 0; k < 5; k++) {
            for (int l = 0; l < 5; l++) {
                temp = stevilaGrid[i + k][j + l];
                stevilaRacunanje[k][l] = temp;
            }
        }
        for (int k = 0; k < 5; k++) {
            rezultat[k] = stevilaRacunanje[k][0] * stevilaRacunanje[k][1] * stevilaRacunanje[k][2] * stevilaRacunanje[k][3];
            rezultat[k+4] = stevilaRacunanje[0][k] * stevilaRacunanje[1][k] * stevilaRacunanje[2][k] * stevilaRacunanje[3][k];
        }
        rezultat[8] = stevilaRacunanje[0][0] * stevilaRacunanje[1][1] * stevilaRacunanje[2][2] * stevilaRacunanje[3][3];
        rezultat[9] = stevilaRacunanje[0][3] * stevilaRacunanje[1][2] * stevilaRacunanje[2][1] * stevilaRacunanje[3][0];
        for (int k = 0; k < 10; k++) {
            trenutni = rezultat[k];
            if(trenutni > najvecji){
                najvecji = trenutni;
            }
        }
    }
}
printf("Najvecji zmnozek: %d", najvecji);

return (EXIT_SUCCESS);
}

首先,我将数字字符串转换为二维 int 数组。

然后我尝试将网格划分为更小的 4x4 正方形,这样我可以更轻松地工作。这就是问题开始的地方(如代码中标记的)。

一开始(*i​​=0,j=0;k=4,j=0*)一些奇怪的事情开始发生。 *stevilaGrid[][]* 中的值开始随机且看似毫无原因地变化。

有人可以向我解释一下吗?我已经在使用 Cygwin 64 位的 Windows 和使用 GCC 64 位的 Ubuntu 上测试了此行为。

最佳答案

[i + k][j + l];

i==16k==4j==16j==4时> 你将点击元素 [20] 你的数组只有 0...19

关于c - 数组值无故改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42916108/

相关文章:

c# - 本地窗口为空(Visual Studio 2015)

debugging - 如何在 Visual Studio Code 中的 launch.json 中扩展 $PATH?

c++ - 调试时如何在VS Code的集成终端中查看C程序的输出

c - sprintf(array, "%4d\n", int),将其转回 int

javascript - 一个变量可以指向另一个变量吗?

c++ - 寻找最小字典顺序数组

c - 如何将命令行参数读取为整数而不是字符串?

javascript - 在 JavaScript 中添加数字数组时出现奇怪的结果

c - 无法从函数中释放内存

c - valgrind 给出了错误的未初始化大小