C++ 动态分配的字符数组显示为未使用构造函数初始化

C++ 动态分配的字符数组显示为未使用构造函数初始化,c++,C++,编译此代码时,我收到以下警告: 条件跳转或移动取决于未初始化的值 我的set函数使用的是动态数组,如果动态空间已经存在,我希望让它删除它 班级: class Name { char* m_name; public: Name(); Name(const char*); ~Name(); void set(const char*); } 构造函数和setEmpty() 职能: void Name::set(const char* name) {

编译此代码时,我收到以下警告:

条件跳转或移动取决于未初始化的值

我的set函数使用的是动态数组,如果动态空间已经存在,我希望让它删除它

班级:

class Name
{
    char* m_name;

public:
    Name();
    Name(const char*);
    ~Name();
    void set(const char*);
}
构造函数和setEmpty()

职能:

void Name::set(const char* name)
{
    if (name == nullptr || std::strlen(name) == 0)
    {
        setEmpty(); // <-- What my constructor has; sets 'm_name' to nullptr;
    }
    else
    {
        int length = std::strlen(name) + 1;
        if (m_name != nullptr) // <-- gives warning because m_name is not initialized however it was created via constructor (?)
        {
        delete[] m_name;
        }
        m_name = new char[length]; // <-- No matter what I want to re-create the dynamic array
        std::strcpy(m_name, name);
    }
}
这并不十分清楚,但如果您的类有任何构造函数不调用setEmpty(),那么其中一个可能没有初始化m_name。如果发生这种情况,后续调用set()时,如果strlen()返回一个非零值的非空指针,则会在未初始化时测试m_name的值。您还没有说明如何定义接受const char*的构造函数,因此可能是构造函数造成的彼得5分钟前

这实际上就是问题所在

解决方案:

Name::Name(const char* name)
    {
        setEmpty(); // <-- call safe state in all constructors
        set(name, dob, power, level, super);
    }
Name::Name(const char*Name)
{

setEmpty()/c标签在这里是不合适的。这是C++。C没有类。目前还不清楚问题是什么。请阅读并提供一个.@弗兰Sou-OISANDURIX。是的。我只是为了简化代码而做的。我可以添加类名。这个误解有时会发生,事实是:你不会使代码变得更可读或更简单。通过人为引入错误或省略部分内容来理解。请阅读有关@idclev463035818的修订内容。谢谢!
void Name::set(const char* name)
{
    if (name == nullptr || std::strlen(name) == 0)
    {
        setEmpty(); // <-- What my constructor has; sets 'm_name' to nullptr;
    }
    else
    {
        int length = std::strlen(name) + 1;
        if (m_name != nullptr) // <-- gives warning because m_name is not initialized however it was created via constructor (?)
        {
        delete[] m_name;
        }
        m_name = new char[length]; // <-- No matter what I want to re-create the dynamic array
        std::strcpy(m_name, name);
    }
}
int main()
{
    // constructors
    Name s1("Sample");
    Name s2, s3;
    Name badData[] = {
        Name ("Kappa"),
        Name("Omega"),
        Name(nullptr),
        Name("", )
    };
    s1.set("Sample");

//...//
}
Name::Name(const char* name)
    {
        setEmpty(); // <-- call safe state in all constructors
        set(name, dob, power, level, super);
    }