我正在逐步完成以下代码段:
(71) int nonzero = this->matrix->getNonzero();
(72) int rows = this->matrix->getRows();
您希望nonzero
和rows
获取相应函数的返回值。但是没有 - 在gdb中,它们在第71行和第72行之前具有值200,并且它们之后都具有值200。尽管这两个函数返回的值不同于200。
另一方面,变量似乎采取了正确的价值。使用cout打印时,它们具有预期值。只有gdb似乎给出了错误的值。
您可以在调试会话协议中看到这一点:
0: 71 int nonzero = this->matrix->getNonzero();
0: (gdb) 0: (gdb) print nonzero
0: $1 = 200
0: (gdb) print this->matrix->getNonzero()
0: $2 = 102437
0: (gdb) n
0: 72 int rows = this->matrix->getRows();
0: (gdb) print nonzero
0: $3 = 200
0: (gdb) print this->matrix->getRows()
0: $4 = 19044
0: (gdb) n
0: 74 this->tmp.init("tmpCUDA", rows, 1, rows, true);
0: (gdb) print rows
0: $5 = 200
似乎我要么犯了一个非常愚蠢的错误,要么遇到一些非常奇怪的事情。我不得不说这些行在以前的版本中运行良好,并且在程序结构发生重大变化后会引起麻烦,但不是那个类。
(是的,我做make clean
并重新启动。代码未优化。获取函数都是const,不能更改成员变量。)