我有一张存储多项式组件的地图。关键是指数,值是系数。具有整数键和整数值的映射。我在我的打印功能中迭代,当我进行迭代时程序崩溃。当我把钥匙插入我的阵列时,一切似乎都要检查出来。输入文件的格式为-1 0 5 1 20 3 -9 2 -2 1 1 2 -2 3 1 9,其中每对都是(系数,指数).`
//header
#ifndef poly_h
#define poly_h
#include <map>
class poly {
private:
std::map<int, int>* pol;
public:
poly(char* filename);
poly& operator+(poly& rhs);
poly& operator-(poly& rhs);
poly& operator*(poly& rhs);
void print();
~poly();
};
#endif
//cpp file
#include "poly.h"
#include <iostream>
#include <fstream>
using namespace std;
poly::poly(char* filename)
{
map<int, int>* pol = new map<int, int>;
ifstream input_file;
input_file.open("input.txt");
int coe;
int exp;
while (input_file >> coe) {
input_file >> exp;
cout << coe << " ^" << exp << " ";
map<int, int>::iterator it = pol->find(exp);
if (it == pol->end()) {
(*pol)[exp] = coe;
}
else {
(*pol)[exp] += coe;
if ((*pol)[exp] == 0) {
pol->erase(it);
}
}
cout << (*pol)[exp];
//print();
cout << endl;
}
input_file.close();
}
void poly::print()
{
cout << "inside print<<endl;
for (map<int, int>::iterator outer_iter = pol->begin(); outer_iter != pol->end(); ++outer_iter);
cout << "done";
}
poly::~poly()
{
delete pol;
}
答案 0 :(得分:1)
该行
map<int, int>* pol = new map<int, int>;
是罪魁祸首。它创建一个函数局部变量。它不设置成员变量的值。因此,同名的成员变量仍未初始化。在其他函数中取消引用该变量会导致未定义的行为。
将该行更改为:
pol = new map<int, int>;
正如其中一条评论中所建议的那样,我强烈建议从指向对象的指针更改该成员变量。您可以通过使用对象获得自动内存管理。您无需担心使用new
为其分配内存并使用delete
来释放它所使用的内存。不仅如此,如果你在课堂上完成分配记忆的工作,你需要了解The Rule of Three,并确保你的班级确认这些规则。
如果您使用的是C ++ 11编译器,The Rule of Three将成为The Rule of Five。