c++ - 读取访问冲突_First 是 nullPtr

标签 c++ nullptr

我有一个默认构造函数复制构造函数析构函数赋值 运算符长度字符串 函数。当我调用复制构造函数并尝试打印新 char* 的值时,我得到一个读取访问冲突 _First 是 nullptr。调试器显示 iosfwd 代码并在错误处中断,但我不知道这意味着什么。任何帮助都是极好的。 这是调试器显示错误的地方。

  static size_t __CLRCALL_OR_CDECL length(const _Elem *_First)
        {   // find length of null-terminated string
        return (*_First == 0 ? 0 // <- this line
            : _CSTD strlen(_First));
        }

这些是我的功能(也不是我们不允许使用 STRCPY)

 MyString::MyString() { //default constructor
    string = new char[6];
    int i = 0;
    for (i; i < strlen(string); i++) {
        string[i] = NULL;
    }
    string[i] = '\0';
}

    MyString::MyString(const MyString &s) { //copy constructor
    char* string = new char[strlen(s.string) + 1];
    int i = 0;
    for (i; i < strlen(s.string); i++) {
        string[i] = s.string[i];
    }
    string[i] = '\0';
}

    MyString::~MyString() { //destructor
    delete[] string;
    string = NULL;
}

    MyString& MyString::operator=(const MyString& s) { //assignment operator
    char* temp = new char[strlen(s.string) + 1];
    int i = 0;
    for (i; i < strlen(s.string); i++) {
        temp[i] = s.string[i];
    }
    temp [i] = '\0';
    delete[] string;
    string = temp;
    return *this;
}

    size_t MyString::length() const { //length of string
    return strlen(string);
}

    char* MyString::cString() { //string
    return string; 
}

    int main(int argc, const char * argv[]){
    MyString s;
    std::cout << "Empty: '" << s.cString() << "'\n";
    s = "hello";
    std::cout << "After operator=: '" << s.cString() << "'\n";
    {
        MyString t(s);
        std::cout << "After copy: '" << t.cString() << "'\n";
        s = t;
    }
}

最佳答案

复制构造函数中的这一行

char* string = new char[strlen(s.string) + 1];

创建一个名为 string 的新局部变量,这意味着您的名为 string 的成员变量永远不会被赋值。

删除char *

关于c++ - 读取访问冲突_First 是 nullPtr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35330544/

相关文章:

c++ - 遍历一系列范围

c++ - C 中的另一个 coredump 问题

c++ - 使用 shared_ptr boost 序列化而不在指向类中实现 serialize() 函数

C++ 编译器说 "inconsistent deduction for auto return type"

c++ - 为什么 std::nullptr_t 在 C++ 中不能与 std::cout 一起使用?

c++ - 如何配置 QtCreator 以使用 C++11?

c++ - C++/Star 问题中的正则表达式

c++ - 从 nullptr 推导的指向模板类型?

c++ - 在 mac 上编译时,nullptr 未在范围内声明

c++ - 完美模拟 nullptr