找了两天的问题,头疼!(我很清楚的注释了代码,很好理解的。)C/C++ code//这是电话薄的定义class Addressbook
找了两天的问题,头疼!(我很清楚的注释了代码,很好理解的。)
- C/C++ code
//这是电话薄的定义class Addressbook{public: typedef struct{ std::string name; std::string tele; }Data; typedef struct Node{ Data information; struct Node *next; }Node, *List; Addressbook(); ~Addressbook(); void append(std::istream &in); //添加联系人 void remove(const std::string &name); //删除联系人 void scan(std::ostream &out); //浏览联系人 private: List linkmen;};//就是这个成员函数问题运行时错误,求解!void Addressbook::append(std::istream &in){ Node *newlinkman = (Node *)malloc(sizeof(Node)); if(newlinkman == NULL) exit(EXIT_FAILURE); //就是下面这两句运行时出错,始终想不明白。。。 in >> (newlinkman->information).name; in >> (newlinkman->information).tele; newlinkman->next = NULL; //linkmen是类的唯一数据成员且为已经初始化的链表头结点 linkmen->next = newlinkman; }[解决办法]
既然你在使用C++,那么请使用new而非malloc
前者会调用类的构造函数,后者仅仅分配所需大小的内存空间
Node *newlinkman = (Node *)malloc(sizeof(Node));
在这行代码里,你申请了一个Node所需的内存空间
没有初始化,没有预分配内存(string类自己管理字符串所需内存,sizeof无权对它指手画脚),什么都没有,仅仅只有一个内存空间
然后输入流in被告知要向一个string内输入一个字符串,但它很困惑:为什么我找不到这个string内应有的一些参数,例如当前长度和内存地址?
