读取访问冲突 _First 为 nullPtr
Posted
技术标签:
【中文标题】读取访问冲突 _First 为 nullPtr【英文标题】:Read Access Violation _First was nullPtr 【发布时间】:2016-02-11 04:00:26 【问题描述】:我有一个默认构造函数、复制构造函数、析构函数、赋值 运算符、length 和 string 函数。当我调用复制构造函数并尝试打印新 char* 的值时,我得到一个读取访问冲突_First is 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;
【问题讨论】:
【参考方案1】:复制构造函数中的这一行
char* string = new char[strlen(s.string) + 1];
创建一个名为 string
的新局部变量,这意味着永远不会为名为 string
的成员变量赋值。
删除char *
【讨论】:
以上是关于读取访问冲突 _First 为 nullPtr的主要内容,如果未能解决你的问题,请参考以下文章
抛出异常:读取访问冲突。 **bp** 为 0xFFFFFFFFFFFFFFFF