添加字符串,核心转储
Adding strings, Core dumped
我正在尝试在C++中实现字符串类,
#ifndef STRING
# define STRING
class String{
private:
char *Buffer = new char;
inline unsigned long Length(const char *);
inline unsigned long Length(char *);
inline unsigned long Length(String);
inline unsigned long Length(String *);
public:
~String(void){
delete Buffer;
}
unsigned long Size = 0;
void Equal(const char *);
void Equal(char *);
void Equal(String *);
void Equal(String);
char *Get(void);
//Something is wrong in Add method.
char *Add(const char *);
char *Add(char *);
char *Add(String *);
char *Add(String);
//Something is wrong in Add method
char *Multiply(unsigned long *);
char *Multiply(unsigned long);
char& operator[](const unsigned long Index);
const char& operator[](const unsigned long Index) const;
};
# include "StringIO.hpp"
#endif
StringIO.hpp:
#ifndef STRINGIO
# define STRINGIO
inline unsigned long String::Length(String S){return S.Size;}
inline unsigned long String::Length(String *S){return S->Size;}
void String::Equal(String S){this->Equal(S.Buffer);}
void String::Equal(String *S){this->Equal(S->Buffer);}
inline unsigned long String::Length(const char *S){
unsigned long Count = 0; while(S[Count] != ' '){ Count++;} return Count;
}
inline unsigned long String::Length(char *S){
unsigned long Count = 0; while(S[Count] != ' '){ Count++;} return Count;
}
void String::Equal(const char *S){
unsigned long Count = 0; while(Count <= this->Length(S)){
this->Buffer[Count] = S[Count];
Count++;
} this->Size = Count - 1;
}
void String::Equal(char *S){
unsigned long Count = 0; while(Count <= this->Length(S)){
this->Buffer[Count] = S[Count];
Count++;
} this->Size = Count - 1;
}
char *String::Get(void){ return this->Buffer;}
/*Something is wrong in here*/
char *String::Add(String *S){return Add(S->Buffer);}
char *String::Add(String S){return Add(S.Buffer);}
char *String::Add(const char *S){
char *Copy = this->Get(); for(unsigned long Count = 0; Count <= Length(S); Count++){
Copy[this->Size + Count] = S[Count];
} return Copy;
}
char *String::Add(char *S){
char *Copy = this->Get(); for(unsigned long Count = 0; Count <= Length(S); Count++){
Copy[this->Size + Count] = S[Count];
} return Copy;
}
/*Something is wrong in here*/
#endif
我编写了一个添加字符串的方法,以及一个简单的程序,使用此方法添加字符串并将其打印到屏幕上:
int main(void){
String *X = new String;
String *Y = new String;
X->Equal("Hello world!n");
Y->Equal("Hello world!n");
std::cout << X->Add(Y);
delete X; delete Y; //The line giving crash
return 0;
没有编译错误,但是当我运行它时,它会给出核心转储错误。我该如何解决?怜悯,我是C++初学者。
编辑:
没关系。
首先,使用以下方法分配字符串缓冲区:
char *Buffer = new char;
但这只分配了一个字符,如果你想写字符串类,那么你应该使用:
char *Buffer = new char[size];
并且delete[]
,分配也应该是您将文本(即字符串文字)分配给字符串类的位置。
你的::Add
方法也很奇怪:
char *String::Add(const char *S){
char *Copy = this->Get(); for(unsigned long Count = 0; Count <= Length(S); Count++){
Copy[this->Size + Count] = S[Count];
} return Copy;
}
在哪里为新字符串分配额外的内存?
相关文章:
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- 分段错误(核心转储) - 使用 SavedModel 的 Tensorflow C++ API 进行推断
- 我不知道为什么这段代码会让核心被转储?
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- 访问std::list元素将转储核心
- 使用SIGSEGV或SIGABRT信号转储核心并终止进程
- Eclipse (C++) 崩溃 无法写入核心转储.核心转储已被禁用
- 已终止(转储核心)
- 转储核心时拍摄堆快照的时间
- 读取字符串时转储核心
- 当main函数返回时转储核心
- 是否可以转储核心但不退出进程
- 在尝试libssh身份验证时转储核心