Char*没有在我的类中保留文本-初始化构造函数问题
Char* not retaining text inside my class - initialization constructor problem?
我有以下类(我已经修剪了不相关的内容):
class Example
{
private:
char* name;
int value[4];
int numVals;
public:
Example();
Example(char name[], int numVals, int, int, int, int);
~Example();
};
下面是初始化构造函数:
Example::Example(char na[], int vals, int v1, int v2, int v3, int v4)
{
name = new char[strlen(na)+1];
strcpy(name, na);
numVals = vals;
value[0] = v1;
value[1] = v2;
value[2] = v3;
value[3] = v4;
// cout << name; // this DOES print out the correct text
}
在我的main()中,我有一个示例类的数组,Example myArray[numRecs]
。然后我有一个循环,使用初始化构造函数来填充数组:
myArray[i] = Example(name, numVals, v[0], v[1], v[2], v[3]);
一切工作如预期,然而name
不保留我放入它的字符。我使用cout检查了当它传递到构造函数时的值是什么,它是正确的!然而,当我使用我的Example::Print()时,它吐出一个随机字符(对于Example的每个实例都是相同的字符)。
void Example::Print()
{
int total, avg;
total = avg = 0;
cout << left << setw(20) << name << 't';
for(int i=0; i<4; i++){
if(i<numVals){
cout << left << setw(8) << value[i];
total += value[i];
} else
cout << left << setw(8) << " ";
}
avg = total/numVals;
cout << left << setw(8) << total <<
left << setw(8) << avg << endl;
}
任何想法?谢谢!
哦,还有,这是作业。我们已经被告知将name字段保持为char指针,而不是字符串。我很困惑,我应该使用什么初始化构造函数(char* name或char name[]或..有区别吗?)
编辑:这是析构函数和默认构造函数。我还没有复制构造函数,因为赋值没有调用它,也没有使用它。无论如何,为了完整起见,我还是要做一个。
Example::~Example()
{
delete [] name;
}
Example::Example()
{
numVals = 0;
for(int i=0; i<4; i++)
value[i] = -1;
}
您应该通过内存调试器运行您的程序来见证您所创建的噩梦!
你在你的类中使用手动内存管理,但是你忘了遵守规则三:你没有实现复制构造函数、赋值操作符和析构函数!因此,临时确实分配内存,复制指针(粗略地),然后可能在超出作用域时使内存无效。
立即"修复我的代码"的答案是,你必须实现一个适当的赋值操作符和复制构造函数来对char数组进行深度复制。
"这是c++"的答案是不使用指针,new
和数组,而使用std::string
。
一个简单的修复方法是在数组中存储指向示例的指针,而不是实际对象。这样,您就不必处理复制(您还没有实现)。
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 有根的二进制搜索树.保留与其父级的链接
- 如何将内容数组写入文本文件?
- 无法通过空白将文本文件行分隔为矢量
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为多个会话保留XPtr
- C++将文本文件中的数据读取到结构数组中
- 在指针的帮助下,文本文件中单词的频率
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- QT 标签 setText() 同时保留文本格式
- QlineEdit:显示一个处理过的文本,而不是输入的文本,而是保留它(自定义回声模式)
- 基于文本的角色扮演游戏拖放和保留物品功能
- 当从Python传递到C++并返回到Python时,我如何保留文本
- 在新运行的 c++ 程序中重新加载文本文件时保留文本文件的内容
- Char*没有在我的类中保留文本-初始化构造函数问题
- TabCtrl_InsertItem:我们是否需要保留文本的内存
- c++将矩阵风格的文本文件读入二维数组,只保留数字块