我一直致力于处理手机目录的项目。我的程序从数据表中读取数据并创建一系列电话。
我有两个课程:软电话和车队。
Softphone包含电话(私人)和获取/设置以及打印功能的所有值(公共)。
class softphone {
public:
string name;
//All my other variables
public:
softphone();
softphone(const softphone &obj);
~softphone();
//Get functions
string get_name();
//ect
//Set functions
void set_name(string);
//ect
//Print functions
void print_name();
//ect
}
Fleet包含电话数组和输出操作功能
class fleet {
private:
//Some variables and buffers
softphone* phone; ->This is the array containing all the phones
public:
//Read file and create array functions
//Functions
void print_fleet();
//More output functions
};
舰队类有一个指向软电话的指针,我用它来动态创建一系列手机。它通过从文件中读取目录来创建数组。 (我不知道在运行时间之前有多少电话。)
它计算文件中的行数,然后创建足够大的数组以保存所有数据:
phone = new softphone[number_of_lines - 1]; //Line 1 is header
它从文件读取,用设置函数保存数据,然后我使用增加指针 电话++;
到目前为止一切顺利。现在,如果我想访问这些电话并要求成员功能。
phone[0].print_name();
编译器没有给我错误,但输出是垃圾(屏幕上的无限随机字符。)我在内存位置异常时得到一个std :: bad_alloc。
for(int i = 0; i < (number_of_lines - 1); i++){
phone--
}
phone->print_name();
现在它有效。通过这种方式,我可以访问所有手机并将其打印出来。所有数据都在那里。但我必须增加/减少指针,我不能使用索引号。
我如何使用索引号?为什么计算机在我使用时会变得疯狂,但是当我增加它时会很好?
感谢您的回复,
答案 0 :(得分:0)
创建阵列时,手机指向第一个元素。之后,您开始递增指针,直到到达数组的末尾。此时,手机不再指向阵列的开头。然后,你运行你的循环,它通过指针返回,直到它回到开头,事情再次开始工作。我建议你停止使用指针算法,只使用索引。然后,您确信手机始终指向阵列的开头。或者,您可以指定一个不同的变量,并将其用于指针以填充数组。或者,您可以使用std :: vector作为@PaulMcKenzie建议。