我正在开发一个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函数并将其替换为已知数字。
答案 0 :(得分:1)
所以我会回答我自己的问题。
感谢@KlasLindbäck的评论,我修复了与在for循环中不初始化C静态数组有关的问题。所以我在问题代码之前和之后检查了所有数组并执行了
memset(a_c_array, 0, sizeof(a_c_array));
声明每个数组后。现在工作正常。谢谢你的帮助!