有相当简单的C代码的问题

时间:2016-12-01 14:33:17

标签: ios objective-c c xcode algorithm

我正在开发一个XCode中的应用程序,并且必须为算法编写一些C语言。这是C代码的一部分:

        double dataTag[M][N];

        // dataTag initialized to values.....

        double w[N]; // This is outside for loop at the top level of the method 
        for (int i = 0; i < N; i++) {
            w[i] = pow(10.0, dataTag[2][i] / 10.0 / b);
        }

        //This is inside for loop.....

        double disErr[N];

        // disErr set and values confirmed with printArray...

        double transedEstSetDrv[N][M];

        // transedEstSetDrv set and values confirmed with printArray...

        double stepGrad[M] = {0, 0, 0};
        for (int j = 0; j < M; j++) {

            double dotProductResult[M];
            dotProductOfArrays(w, disErr, dotProductResult, N);

            stepGrad[j] = sumOfArrayMultiplication(transedEstSetDrv[j], dotProductResult, M);
        }

        // Print array to console to confirm values
        NSLog(@"%f %f %f", stepGrad[0], stepGrad[1], stepGrad[2]); <-- if this is present algorithm gives different results.

        //Continue calculations......

所以这是C中算法的一部分,它在for循环中。奇怪的部分是打印stepGrad数组的NSLog。根据我是否评论对NSLog的调用 - 整个算法给出不同的结果。

如果有人给出一些调试建议,那就太好了。

谢谢!

更新1:

简化示例,它具有相同的问题,并提供了更多代码来支持该问题。

更新2:

为了简单起见,删除了length_of_array函数并将其替换为已知数字。

1 个答案:

答案 0 :(得分:1)

所以我会回答我自己的问题。

感谢@KlasLindbäck的评论,我修复了与在for循环中不初始化C静态数组有关的问题。所以我在问题代码之前和之后检查了所有数组并执行了

memset(a_c_array, 0, sizeof(a_c_array));

声明每个数组后。现在工作正常。谢谢你的帮助!