我遇到的问题让我很困惑。我希望将一个稀疏矩阵存储在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元素不变?
感谢您提供有用的信息!
答案 0 :(得分:0)
我最好的猜测是行的一个元素是负数,因此res [row [k]]将是负数。
尝试使用valgrind运行程序,这将告诉您何时出现数组的界限问题。
答案 1 :(得分:0)
检查行[k]的值并确保它在0和ELEMENTS_NO之间
答案 2 :(得分:0)
您正在使用行数组中的值索引res []。第一个超过10亿,所以你正在改变res []的第十亿个元素,我怀疑它超出了数组的末尾。然后可能发生任何事情,包括覆盖其他变量。