为了指定上面的问题,我将带一个班学习c++。我们最近刚刚学习了动态数组和类。在最近的一次赋值中,我们假设从文本文件中获取信息,并在具有给定结构和类的构造函数内初始化动态数组的特定单元格(如下所示(。话虽如此,但我的问题是,每当我尝试运行程序时,它都会崩溃。
class call_record
{
public:
string firstname;
string lastname;
string cell_number;
int relays;
int call_length;
double net_cost;
double tax_rate;
double call_tax;
double total_cost;
};
class call_class
{
public:
call_class();
~call_class();
bool Is_empty();
bool Is_full();
int Search(const string key);
void Add();
void Remove(const string key);
void Double_size();
void Process();
void Print();
private:
int count;
int size;
call_record *call_DB;
};
// default constructor
call_class::call_class()
{
size = 5;
count = 0;
ifstream in;
in.open("callstats_data.txt");
while (!in.eof())
{
if(Is_full())
{
Double_size();
}
in >> call_DB[count].firstname
>> call_DB[count].lastname
>> call_DB[count].cell_number
>> call_DB[count].relays
>> call_DB[count].call_length;
count++;
}
in.close();
}
为了包含更多的上下文,我发现这个问题主要发生在我尝试将文件读取到类的构造函数内的动态数组中时。我尝试使用静态数组而不是动态数组,它完全没有问题;但是,我不能真正使用静态数组。所以我想知道是否有特定的方法可以将文本文件中的信息放入默认构造函数内部的动态数组中。
问题是没有为call_DB[count]
分配内存;
在使用call_DB[count]
之前动态或静态地分配它;
例如:
call_record call_DB[5];
而不是call_record *call_DB;
此外,如果call_DB有一个特定的大小,不要越过它,确保你没有试图访问以上分配的内存:
while (!in.eof() && (count < 5))
如果您使用STL将call_DB声明为std::vector,那么您将避免上述保护,并且您的vector将根据需要增长。
std::vector<call_record> call_DB
;
记住使用所需的包含文件:
#include <vector>