gpt4 book ai didi

c++ - 段错误在 gtest 中初始化堆栈上的引用变量

转载 作者:行者123 更新时间:2023-11-28 04:31:10 25 4
gpt4 key购买 nike

我正在为我的 TwoDArray 容器创建测试,但我遇到了段错误。 TwoDArray 对象在堆上初始化良好,但当我尝试在堆栈上测试它时,出现段错误。它使用堆上的一个 vector 作为底层容器。我完美地初始化了一个 vector ,但 TwoDArray 对象在运行时立即出现段错误。

我删除了函数,因为我最关心的是初始化。

 21 template<typename T>
22 class TwoDArray{
23
24 private:
25 int numRows;
26 int numCols;
27 std::vector<T> * vecPtr; // Underlying container
28
29 public:
30 TwoDArray(){ TwoDArray( DEF_ROW_SIZE, DEF_COL_SIZE ); }

...

40 TwoDArray( int m, int n ):numRows(m), numCols(n),
41 vecPtr(new std::vector<T>(m*n)){ }

...

43 /* Destructor that specifies the size of the 2D Array
44 */
45 ~TwoDArray(){ delete vecPtr; }
...

然后是实际测试:

  2 #include <vector>
3 #include <gtest/gtest.h>
4 #include "TwoDArray.hpp"
5
6 class TestTwoDArray : public testing::Test{
7 public:
8
9 TwoDArray<int> arr1;
10 std::vector<int> vec;
11
12 virtual void SetUp(){
14 }
15
16 virtual void TestDown(){
17 }
18 };
19
20 TEST_F( TestTwoDArray, validSizeTest ){
21 //arr1 = TwoDArray<int>();
22
24 }
25

30 int main(int argc, char* argv[]){
31 TwoDArray<int> arr1;
32 testing::InitGoogleTest(&argc,argv);
33 return RUN_ALL_TESTS();
34 }

我有另一个类可以在堆上很好地创建对象。这里第 9 行给出了段错误。但是第 31 行没有。也许我不明白如何初始化某些东西。

最佳答案

您的默认构造函数并没有按照您的想法行事。它保留各种未初始化的成员变量,然后创建一个临时的 TwoDArray 对象。

你想要的委托(delegate)构造函数是

TwoDArray(): TwoDArray( DEF_ROW_SIZE, DEF_COL_SIZE ) { }

关于c++ - 段错误在 gtest 中初始化堆栈上的引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52845855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com