c++ “致命错误:在自定义String类中定义字符串构造函数时使用“SIGABRT

toe95027  于 2023-02-06  发布在  其他
关注(0)|答案(1)|浏览(218)

发生此错误

FATAL ERROR: test case CRASHED: SIGABRT - Abort (abnormal termination) signal
::error::Error: Exit with code: 134 and signal: null

当我测试一个字符串构造函数“String::String(const char* other)”时

String::String(const char* other) // the constructor I'm talking about
    {
         if (other == nullptr)
         {
              String();
         }
         else if (other != nullptr)
         {
              int count{0};
              for (int i = 0; other[i] != '\0'; ++i)
              {
                  count = count + 1;
              }
              slength = count;
              // delete [] ifmt; // ?
              ifmt = new char [slength + 1];
              for (int i = 0; i < slength; ++i)    
              {
                  ifmt[i] = other[i];
              }
              ifmt[slength] = '\0'; 
         }
    }
    }
String::String()
    {
        slength = 0; 
        ifmt = new char[slength + 1]; 
        ifmt[0] = '\0';
    }

在我的自定义String类中。

private:
            
        int slength;
        char* ifmt;

我收到的建议之一是创建一个新的选项分支来处理“负长度”,并在本例中构造一个空字符串,但我不知道“负长度”是什么。
我也在网上搜索了一些案例,但我发现我已经做了他们建议的事情,但它仍然不工作。https://www.geeksforgeeks.org/how-to-create-a-custom-string-class-in-c-with-basic-functionalities/design a string class constructor c++custom string exercise in c++
如果有人能在这件事上给予一些指导,我将不胜感激。

rqqzpn5f

rqqzpn5f1#

此代码片段

if (other == nullptr)
     {
          String();
     }

没有任何意义。
在这份声明中

String();

创建了一个临时对象,该临时对象立即被销毁。
因此,当传递空指针时,类的对象具有未初始化的数据成员。
请注意,有一个多余的右大括号

//...
}
}

字符串::字符串()

相关问题