【发布时间】:2021-11-24 03:00:55
【问题描述】:
我实现链表的算法如下
- 添加新节点并返回位置指针的函数。
- 处理添加节点前端、后端操作的核心函数。
linkedList.hpp
#include <cstddef>
class LinkedList{
public:
int value {0};
LinkedList* nextNode {NULL};
};
LinkedList* addNewNode(int nodeVal){
LinkedList *newNode;
newNode->value = nodeVal;
newNode->nextNode = nullptr;
return newNode;
}
googletest下面的单元测试检查是否
- 返回的节点指针不为空。
- 返回的节点有值。
- 返回节点的下一个节点值设置为 NULL。
linkedListTest.cpp
#include <gtest/gtest.h>
#include "../linkedList.hpp"
int main(int argc, char **argv){
::testing::InitGoogleTest(&argc,argv);
return RUN_ALL_TESTS();
}
class LinkedListTest : public ::testing::Test{
public:
LinkedList *linkedlist = new LinkedList();
virtual void SetUp(){
}
virtual void TearDown(){
delete linkedlist;
}
};
TEST_F(LinkedListTest,addNewNodeReturnsItsNodePointer){
// act
linkedlist = addNewNode(5);
EXPECT_TRUE(linkedlist != nullptr);
ASSERT_EQ(linkedlist->value,5);
EXPECT_TRUE(linkedlist->nextNode != nullptr);
}
当我运行此代码时,测试通过但我得到了
分段错误
我错过了什么?
【问题讨论】:
-
你的编译器应该警告你
addNewNode中的问题,如果它没有把警告变成最大。 -
newNodeinaddNewNode未初始化。这是一个指向无处的指针。你用的是什么编译器?您应该启用更多警告,例如,对于 GCC-Wall。此外,当您有段错误时,使用调试信息进行编译并在调试器中运行您的可执行文件。它可以为您提供段错误原因的堆栈跟踪(大多数情况下)。 -
@BenjaminMaurer 是的,这就是问题所在。您能否将其发布为答案,以便我接受。
标签: c++ unit-testing linked-list googletest