尝试将字符连接到 char* 时引发异常

Exception is thrown when trying to concatenate a character to char*

本文关键字:异常 char 字符 连接      更新时间:2023-10-16

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

StringBuffer::StringBuffer() {     
    char* _strbuf = (char*)malloc(sizeof(char)*_length);
}
private:
    char* _strbuf;  //buffer to store the original string
    int _length=0;

现在,这是一个追加函数,它将通过重新分配一个新空格来简单地将字符附加到(连接)到这个字符*。

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

当你写:

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

这不会malloc成员_strbuf。那malloc是一个名为 _strbuf局部变量,它恰好与您的成员_strbuf同名。但成员仍未初始化。

因此,当您执行以下操作时:

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

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

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

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

可以将其移动到 mem 初始值设定项列表中以避免任何混淆:

StringBuffer::StringBuffer()
    : _strbuf((char*)malloc(sizeof(char)*_length))
{ }
<小时 />

修复此问题后,C/C++ 中的字符串必须以 null 结尾。你没有在任何地方解释这一点。您需要确保缓冲区中的最后一个字符始终