尝试将字符连接到 char* 时引发异常
Exception is thrown when trying to concatenate a character to char*
以下是我创建 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 结尾。你没有在任何地方解释这一点。您需要确保缓冲区中的最后一个字符始终