我一直在做一个处理电话簿的项目。我的程序从数据表中读取数据,并创建一个电话阵列。
我有两门课:软电话和舰队。
软电话包含电话(私有)的所有值,以及获取/设置和打印函数来访问它们(公共)。
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
}机队包含一系列电话和输出操作功能
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++增加指针;
到目前一切尚好。现在,如果我想要访问这些电话,并调用一个成员的功能。
phone[0].print_name();编译器没有给出错误,但是输出是垃圾(屏幕上的无限随机字符)。我在内存位置异常处得到一个std::bad_alloc。
for(int i = 0; i < (number_of_lines - 1); i++){
phone--
}
phone->print_name();现在起作用了。这样我就可以访问所有的手机并打印出来。所有的数据都在那里。但是我必须增加/减少指针,而且我不能使用索引号。
怎么才能用这个索引号呢?为什么当我使用它的时候,电脑会变得疯狂,而当我增加的时候,它会变得很好呢?
谢谢你的回复,
发布于 2016-12-01 20:00:13
创建数组时,phone将指向第一个元素。然后,开始递增指针,直到到达数组的末尾为止。此时,phone不再指向数组的开头。然后,运行循环,该循环通过指针返回,直到返回到起点,然后一切又开始工作。我建议您停止使用指针算法,而只使用索引。然后,您可以放心,电话总是指向数组的开头。或者,您可以赋值一个不同的变量,并使用它作为指针填充数组。或者,您也可以像@PaulMcKenzie建议的那样使用std::vector。
https://stackoverflow.com/questions/40919157
复制相似问题