You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ LinkedList链表googletest单元测试运行返回段错误问题排查

问题根因分析

1. 新增节点函数未分配内存,产生野指针

addNewNode函数仅声明了LinkedList *newNode指针,未调用new申请堆内存,属于未初始化的野指针,直接对其成员赋值属于非法内存访问,是典型的未定义行为,恰好运行时未立刻崩溃才出现测试用例看似通过的假象。
修正方案:补充内存分配逻辑

LinkedList* addNewNode(int nodeVal){
  // 新增堆内存申请
  LinkedList *newNode = new LinkedList();
  newNode->value = nodeVal;
  newNode->nextNode = nullptr;
  return newNode;
}

2. 单元测试断言逻辑写反

你的校验规则要求返回节点的nextNode必须为NULL,但测试用例中写的是EXPECT_TRUE(linkedlist->nextNode != nullptr);,和需求完全相反,修正为:

// 符合需求的断言,判断nextNode为空
EXPECT_TRUE(linkedlist->nextNode == nullptr);

3. 测试类存在非法释放问题

你在LinkedListTest类定义时就给linkedlist指针new了一个对象,测试函数中直接把linkedlist赋值为addNewNode返回的指针,原堆对象泄漏。更严重的是如果addNewNode返回的是未通过new分配的野指针,TearDown中对该指针执行delete操作会直接触发段错误。
修正方案:调整测试类初始化逻辑

class LinkedListTest : public ::testing::Test{
    public:
        LinkedList *linkedlist = nullptr; // 初始化为空即可
        virtual void SetUp(){}
        virtual void TearDown(){
            delete linkedlist; // 此时delete的是addNewNode返回的合法堆对象
        }
};

内容的提问来源于stack exchange,提问作者Sachith Muhandiram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:09:03