异常的显示错误
Extraordinary display bug
晚上好。对不起,我不能更准确地说明这个问题。
以下代码不显示任何内容,除非:
1。
我把开头的三行未使用的注释行去掉了,它们不会产生任何冲突。2。除非我把main()中的"Hello"改成"Hello world"
我正在使用代码块10.05.
完整代码:
#include <iostream>
using namespace std;
class stringclass
{
protected :
inline bool success() { failbit = false; return true; } //line to ignore
inline bool fail() { failbit = true; return false; } //line to ignore
public :
bool failbit; //line to ignore
char * mystring;
long memsize;
long length;
void reset();
void alloc(long newsize);
void copy(const stringclass & other);
stringclass(const char str[]);
stringclass() {reset(); }
stringclass(const stringclass & other) {copy(other); }
~stringclass() {delete [] mystring;}
friend ostream& operator << (ostream& out, stringclass & obj) {out << obj.mystring; return out;}
};
void stringclass::reset()
{
delete [] mystring;
mystring = NULL;
length = 0;
memsize = 0;
}
void stringclass::alloc(long newsize)
{
delete [] mystring;
mystring = new char[newsize];
memsize = newsize;
mystring[0] = 0;
length = 0;
}
void stringclass::copy(const stringclass & other)
{
if(other.mystring == NULL) reset();
else
{
alloc(other.memsize);
strcpy(mystring, other.mystring);
length = strlen(mystring);
}
}
stringclass::stringclass(const char str[])
: mystring(NULL), memsize(0), length(0)
{
if(str == NULL) reset();
else
{
alloc(strlen(str) + 1);
strcpy(mystring, str);
length = strlen(mystring);
}
}
int main()
{
stringclass str = "Hello";
stringclass str2 = str;
cout << "str = " << str << endl;
cout << "str2 = " << str2 << endl;
cout << endl;
system("PAUSE");
return 0;
}
代码显示:
str =
str2 =
Press any key to continue...
:
str = Hello
str2 = Hello
Press any key to continue...
修改后的:
str = Hello world
str2 = Hello world
Press any key to continue...
我刚刚试着运行这个,并得到了一个段错误。
阅读你的代码-你不确定你的字符串是否以空结束。Strcpy()和strlen()期望字符串以空结束。这肯定会导致随机行为。我运行了你的代码,得到了一个段错误-当打印长度是垃圾值。这很可能是你的问题。
有一个明显的错误:stringclass::reset()
和stringclass::alloc()
, delete[]
是stringclass::mystring
,即使是NULL或初始化。好:
stringclass::stringclass()
: mystring(0), memsize(0), length(0) {}
void stringclass::reset()
{
if(mystring) delete[] mystring;
mystring = 0;
memsize = 0;
length = 0;
}
void stringclass::alloc(long newsize)
{
if(memsize < newsize) {
if(mystring) delete[] mystring;
memsize = newsize;
mystring = new char[memsize];
}
length = 0;
}
等等……但更好:使用std::string
。
您的stringclass的复制构造函数没有初始化类成员。
当像这样实现复制构造函数时,它应该可以工作。
stringclass::stringclass(const stringclass & other)
: mystring(0), memsize(0), length(0)
{
copy(other);
}
相关文章:
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 程序崩溃并显示"std::out_of_range"错误
- 显示错误输出的简单数组排序程序
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 我是 c++ 的新手.学习基本知识后,我想做井字游戏.对于印刷板,我在下面写代码,但它显示错误
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- Clion显示错误,但可以使用Cmake成功构建代码
- 代码使用向量成功运行,但使用数组显示错误
- 在链表中的第 n 位插入显示分割错误
- 为什么当 vector 为空时会显示运行时错误?
- 查找显示链表时出现的错误
- SDL 映像:无法打开映像,仅显示错误消息
- 为什么将指针重新分配给 1D 数组的 char 时显示错误,但 2D 数组工作正常?
- 与clang++一起使用的VS代码在构建良好的C++文件中显示错误
- 修复转换 IP 时inet_ntoa中的 Endianess 错误显示反转值
- g 编译选项,带有-STD = C 14编译错误显示Werror = C 11 -Compat
- 加载图像约500次后,此错误显示在Visual Studio Qimage:不记忆,返回空图像
- 为什么非unicode应用程序系统语言环境使Unicode字体具有错误显示的符号字符
- 当整数变量用于在 c++ 中声明数组大小时,错误显示为"Expression must have a const value"
- 在Qt错误显示:"Fault Module Name: Qt5Cored.dll"在win 7和调试时:"segmentation fault"在CentOS Linux和Win 7中