【发布时间】:2015-04-03 14:59:31
【问题描述】:
我有以下功能:
unsigned* b_row_to_array(b_row r) {
unsigned a[] = {(r >> 8) & 3,
(r >> 6) & 3,
(r >> 4) & 3,
(r >> 2) & 3,
r & 3};
return a;
}
我为此编写了以下测试函数:
TEST_METHOD(BRowToArrayTest) {
unsigned expected[] = { 0, 0, 0, 0, 0 };
unsigned* computed = b_row_to_array(0);
for (int i = 0; i < 1; i++) {
Assert::AreEqual(expected[i], computed[i]);
}
}
但是测试失败了,说“预期:,实际:”,每次测试的实际值都不同,所以它必须读取错误的地址。我是使用错误的指针还是因为测试函数不在同一个项目中而读取越界?我该如何解决这个问题?
【问题讨论】:
-
a[]的生命周期是多少? -
啊,我认为您是在暗示 a[] 不再是指针指向的地址?如果是这样,我该如何解决这个问题,因为 C++ 不允许直接返回数组。
-
为什么不能使用标准容器,比如
std::vector<unsigned>?如果你必须留在你的数组中,也许用 C 的方式来做,并将一个指向a的指针传递给你的函数,然后将它填充到函数中。
标签: c++ unit-testing pointers