以下代码给出了使用g ++的错误的alloc :
std::bad_alloc what(): "St9bad_alloc". 我无法理解原因,因为这是我添加的第一个元素,vector因此不存在内存限制问题
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class MyCity {
string name;
std::vector<pair<string,double> > neighbours;
public:
MyCity(string s)
{
name =s;
// neighbours.clear();
}
MyCity(string s, string s1, double d)
{
name = s;
neighbours.push_back(std::make_pair(s1,d));
}
};
class MyState {
vector<MyCity*> cities;
string name;
public:
MyState() { }
MyState(string s)
{
name =s;
}
bool add_city(string name, string neigh, double d)
{
MyCity* c = new MyCity(name,neigh,d);
cities.push_back(c);
}
bool add_city(string name)
{
MyCity* c = new MyCity(name);
cities.push_back(c);
return true;
}
};
int main()
{
MyState* ss;
ss->add_city("agra");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谢谢Ruchi
一个明显的错误是ss没有指向一个MyState对象.它指向一个未确定的内存位置,您不应该写入该位置.您可以通过不首先使用指针来完全绕过该问题:
MyState ss;
ss.add_city("agra");
Run Code Online (Sandbox Code Playgroud)
另请注意,MyState处理指向动态分配对象的指针.你必须要小心:目前你有内存泄漏.修复它时,您必须实现复制构造函数和赋值运算符(或禁用复制和赋值).或者你可能决定根本不需要保存动态分配的对象,这将大大简化:
class MyState
{
std::vector<MyCity> cities; // look, no pointers
....
bool add_city(const string& name, const string& neigh, double d)
{
cities.push_back(MyCity(name,neigh,d)); // can use emplace_back in C++11
return true;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
939 次 |
| 最近记录: |