我有以下代码:
class Class
{
private:
char* str;
public:
Class(const char* src)
{
str = new char[strlen(src)];
strcpy(str,source);
}
~Class() {
delete [] str;
}
};
main函数使用一些字符串调用构造函数。退出时,运行时在析构函数上崩溃。错误消息是:
pointer being freed was not allocated
我该如何解决?
答案 0 :(得分:4)
使用std::string
:
class Class {
std::string str;
public:
Class(char const *src) : str(src) {}
};
你不必担心删除内存,关于在末尾为\0
字符分配+1字符空间等。
答案 1 :(得分:0)
复制构造函数应该是这样的。
Class(const char* src)
{
str = new char[strlen(src) + 1];// +1 is missed in original code.
strcpy(str,source); // copy and append '\0'
}
答案 2 :(得分:-1)
如果os无法将内存分配给char str数组,则必须检查指向NULL的指针。 str为NULL,删除[]空指针 - 问题。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
class Class
{
private:
char* str;
public:
Class(const char* src)
{
str = new char[strlen(src)];
if(str) {
strcpy(str,src);
}
}
char* getstr() { return str; }
~Class() {
if(str) {
delete [] str;
}
}
};
int main() {
Class te("sdfs\n");
printf("%s",te.getstr());
return 0;
}