【发布时间】:2013-03-01 19:07:53
【问题描述】:
我有一个类Bar,它的构造函数初始化一个Foo 类型的std::vector(另一个类)。
Bar.cpp
Bar::Bar(int n) {
for(int i = 0; i < n; i++) {
Foo foo;
foo.somefunction(i);
vec.push_back(foo) //this should insert foo into the vector
}
}
Bar.h
class Foo;
class Bar {
std::vector<Foo> vec;
};
当我调试时,构造的第一次迭代工作正常。 foo 已创建,foo.somefunction() 运行正常,foo 被推入 vec。
第二次迭代似乎也可以正常工作,但是当它返回开始第三次迭代时程序崩溃了。
我收到_BLOCK_TYPE_IS_VALID(pHead->nBlockUse) 错误和HEAP CORRUPTION DETECTED。
Foo 是一个包含动态创建数组的类,没什么特别的。
像这样的:
Foo::Foo() {
solution = new float[size];
// some function that initializes the elements of solution
}
和一个常规的析构函数~Foo() {delete [] solution;}。我认为问题不是来自Foo。
【问题讨论】:
-
三法则可能。
-
您使用了
Foos 的向量。你为什么不也使用floats 的向量呢?我打赌你的问题会神奇地消失。 -
我尝试用这种方式声明一个浮点向量:std::vector
vec (size);但它不起作用。有什么方法可以声明一个在运行时确定的大小的向量? -
@jazzybazz:向量本质上是动态的。你不必给他们一个大小。但是如果你想给一个初始大小,使用构造函数初始化器来做。例如,
Foo::Foo() : solution(size) { ... }.
标签: c++ memory vector memory-leaks heap-memory