我希望你们都过得愉快! 所以我想创建一个将单词(字符串)保存为字符数组的类。 我在默认构造函数中将内存分配给str,不确定它是否有效。
` #include <iostream>
using namespace std;
class String{
private:
char *str;
public:
String(){
str=new char[10];
str="Hello";
}
void getstr(){
for (int i=0;i<5;i++){
cout<<str[i];
}
}
~String(){
delete []str;
}
};
int main(){
String s1;
s1.getstr();
return 0;
}
当我运行这个程序时,它会打印“Hello”,但这是确切的输出:
*** Error in `./main': free(): invalid pointer: 0x0000000000400ab5 ***
Hello
当我删除析构函数部分时,它工作正常,但我需要释放分配给str的内存,对吧?有什么帮助吗?
提前致谢:)
答案 0 :(得分:3)
str=new char[10];
str="Hello";
第一行分配一个新的char
数组,该数组可以容纳10个字符(或9个字符和一个空字节)。但是,第二行将指针str
设置为字符串文字"Hello"
的地址。因此,当您调用delete []
时,您试图释放指向字符串文字的指针,而不是指向某些动态分配的内存的指针。如果您希望动态分配字符串,则应复制字符串(最好使用strcpy),或者只使用std::string
,这将为您处理内存管理。