以下是我创建char*_strbuf的代码.它将被创建,但在内存中将为其分配零空间
StringBuffer::StringBuffer() {
char* _strbuf = (char*)malloc(sizeof(char)*_length);
}
private:
char* _strbuf; //buffer to store the original string
int _length=0;
Run Code Online (Sandbox Code Playgroud)
现在,这是一个append函数,它只是通过重新分配一个新的空格将一个字符附加(连接)到这个char*
void StringBuffer:: append(char c) {
_length++;
_strbuf = (char*)realloc(_strbuf, sizeof(char) * _length);
cout << "\n";
cout << _strbuf;
_strbuf[_length-1] = c; //exception thrown here
cout << _strbuf;
}
Run Code Online (Sandbox Code Playgroud)
分配存在某种问题.PS:我试图实现StringBuffer类.没有std::string小号允许
当你写:
StringBuffer::StringBuffer() {
char* _strbuf = (char*)malloc(sizeof(char)*_length);
}
Run Code Online (Sandbox Code Playgroud)
不malloc的成员 _strbuf.这malloc是一个名为的局部变量_strbuf,它恰好与您的成员具有相同的名称_strbuf.但该成员仍然没有初始化.
所以,当你这样做时:
_strbuf = (char*)realloc(_strbuf, sizeof(char) * _length);
Run Code Online (Sandbox Code Playgroud)
这失败了,因为_strbuf以前没有分配过malloc().
要解决这个问题,只需将您在构造函数中执行的操作从声明更改为赋值:
StringBuffer::StringBuffer() {
_strbuf = (char*)malloc(sizeof(char)*_length);
}
Run Code Online (Sandbox Code Playgroud)
可以将其移动到mem-initializer-list中以避免混淆:
StringBuffer::StringBuffer()
: _strbuf((char*)malloc(sizeof(char)*_length))
{ }
Run Code Online (Sandbox Code Playgroud)
解决之后,C/C++中的字符串必须以null结尾.你在任何地方都没有考虑到这一点.您需要确保缓冲区中的最后一个字符始终是\0.
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |