尝试将字符连接到char时抛出异常*

时间:2016-03-03 17:50:43

标签: c++

以下是我创建char * _strbuf的代码。它将被创建但在内存中将为其分配零空间

StringBuffer::StringBuffer() {     
    char* _strbuf = (char*)malloc(sizeof(char)*_length);
}

private:
    char* _strbuf;  //buffer to store the original string
    int _length=0;

现在,这是一个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;
}

分配存在某种问题。 PS:我试图实现StringBuffer类。不允许std::string

1 个答案:

答案 0 :(得分:6)

当你写:

StringBuffer::StringBuffer() {    
    char* _strbuf = (char*)malloc(sizeof(char)*_length);
}

那不是malloc 成员 _strbufmalloc本地变量名为_strbuf,其名称恰好与您的成员_strbuf相同。但该成员仍然没有初始化。

所以当你这样做的时候:

_strbuf = (char*)realloc(_strbuf, sizeof(char) * _length);

此操作失败,因为先前未_strbuf分配malloc()

要解决这个问题,只需将您在构造函数中执行的操作从声明更改为赋值:

StringBuffer::StringBuffer() {    
    _strbuf = (char*)malloc(sizeof(char)*_length);
}

可以移动到mem-initializer-list中以避免混淆:

StringBuffer::StringBuffer()
    : _strbuf((char*)malloc(sizeof(char)*_length))
{ }

修复后,C / C ++中的字符串必须以空值终止。你在任何地方都没有考虑到这一点。您需要确保缓冲区中的最后一个字符始终为\0