이것은 아마도 간단한 문제 일뿐입니다. 그러나 이것은 많은 혼란을 야기합니다.C++ 11 - 반복자로 함수에서 벡터 전달하기
나는 채워진 벡터를 반환하는 클래스 멤버가 :
vector<double> returnVector()
{
return theVector;
}
내가 전달 된 값의 유형을 교대 할 수 있도록 나는 또한 Iterator를 받아 toArray()
을 호출되는 함수가 예를 들면 다음과 같습니다.
template<typename T, typename Inverse>
T* toArray(Inverse begin, Inverse end)
{
size_t size = distance(begin, end);
auto pos = 0;
T* tmp = new T[size];
for(auto i = begin; i != end; i++)
{
tmp[pos] = *i;
pos++;
}
return tmp;
}
나는 내 생각에 다음을 할 수있을 것이라고 생각했습니다.
MyClass class;
auto* var = Functs::toArray<double>(
std::begin(class.returnVector()),
std::end(class.returnVector())
);
이 있지만, 일을하고 나는 약간의 malloc 오류가 발생하지 않는 것. 그러나 다음을 수행 할 수 있습니다.
MyClass class;
vector<double> vals = class.returnVector();
auto* var = Functs::toArray<double>(
std::begin(vals),
std::end(vals)
);
왜 이런 일이 발생하는지 설명 할 수 있습니까? 나는 함수 returnVector
이 실제 벡터를 반환하기 때문에 begin
에서 end
으로 액세스 할 수 있다는 가정하에 있었습니까?
문제와 관련이 없지만 'returnVector' 함수가 벡터의 * copy *를 반환한다는 것을 기억하십시오. 참조 (또는 아마도 'const' 참조)를 반환 할 수 있습니다. –
당신의 문제에 관해서는, 런타임 에러 인 것처럼 프로그램을 디버거에서 먼저 실행하여 에러를 찾아야합니다. 그런 다음 실제 오류에 대해 더 많은 코드를 제공하고 가능한 충돌의 호출 스택을 제공하는 등 오류에 대해 자세히 설명해야합니다. –
@JoachimPileborg 나는 'std :: bad_alloc'의 인스턴스를 던진 후에'terminate '를 호출하는 것처럼 보입니다. what() : std :: bad_alloc 트랩을 중단합니다 : 6' 디버깅을 시도합니다. 'std :: distance (begin, end);'숫자는 원래보다 길어야합니다. – Phorce