数据元素的不需要的更改值是地址/ C中第二个数组的元素数

时间:2015-04-10 23:17:44

标签: c arrays

我遇到的问题让我很困惑。我希望将一个稀疏矩阵存储在3个数组中并执行矩阵/向量乘法。 Matrix和vectorB是文件中的红色。这就是背景。问题在于不必要地将整数数组元素的值更改为"参数"双数组。这就是我在做的事情:

int row[ELEMENTS_NO] = {0};
int col[ELEMENTS_NO] = {0};
double values[ELEMENTS_NO] = {0.0};
double vectorB[M_SIZE] = {0.0};
double res[M_SIZE]={0.0};

...reading row,col,values, from the file...

printf("\n row[0]:%d, col[0]:%d",row[0],col[0]);

for (k = 0; k < ELEMENTS_NO; k++) {
        res[row[k]] = res[row[k]] + values[k]*vectorB[col[k]];
    }

printf("\n\n\n row[0]:%d, col[0]:%d",row[0],col[0]);

第一次打印的输出是正确的:

  

row [0]:1,col [0]:1

而第二次印刷给我以下输出:

  

row [0]:1352932126,col [0]:1

执行for循环后为什么col数组的值发生了变化?如何解决我的问题并保持row和col元素不变?

感谢您提供有用的信息!

3 个答案:

答案 0 :(得分:0)

我最好的猜测是行的一个元素是负数,因此res [row [k]]将是负数。

尝试使用valgrind运行程序,这将告诉您何时出现数组的界限问题。

答案 1 :(得分:0)

检查行[k]的值并确保它在0和ELEMENTS_NO之间

答案 2 :(得分:0)

您正在使用行数组中的值索引res []。第一个超过10亿,所以你正在改变res []的第十亿个元素,我怀疑它超出了数组的末尾。然后可能发生任何事情,包括覆盖其他变量。