클래스가 Bar
이고 생성자가 Foo
(다른 클래스) 인 std::vector
으로 초기화됩니다.메모리 누수, 벡터 푸시 백 C++
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
에서 발생한다고 생각하지 않습니다.
아마도 3 개의 규칙. – chris
당신은'Foo'의 벡터를 사용했습니다. 왜 '플로트'벡터를 사용하지 않았을까요? 너에게 문제가 마술처럼 사라질거야. – jrok
이 방법으로 float 벡터를 선언 해 보았습니다. std :: vector vec (size); 하지만 작동하지 않습니다. 런타임에 결정된 크기의 벡터를 선언하는 방법은 무엇입니까? –
jazzybazz