2013-03-13 3 views
0

벡터를 테스트 할 작은 프로그램을 작성했는데 왜 충돌이 발생하는지 이해하지 못합니다. 누군가 도움을 줄 수 있습니까?std :: vector crash?

#include <iostream> 
#include <algorithm> 
#include <vector> 

void print(int* i) 
{ 
     std::cout << i << std::endl; 
} 

int main() 
{ 
     std::vector<int*>* intPtr; 

     intPtr->push_back(new int(1)); 
     intPtr->push_back(new int(2)); 
     intPtr->push_back(new int(3)); 

     std::for_each(intPtr->begin(), intPtr->end(), print); 
} 

지금 메모리 누출을 무시하면 이는 간단한 예입니다.

+4

는'intPtr'가 초기화되지 않은 포인터이다. –

+0

(1)'std :: vector * intPtr;'std :: vector * intPtr = new std :: vector ();'(Read this) (http : // dl. dropbox.com/u/6101039/Modern%20C%2B%2B.pdf). – WhozCraig

+0

고침, 고마워! – Shippage

답변

1

intPtr을 초기화하는 것을 잊었습니다. 해당 라인을 변경해보십시오 :

std::vector<int*>* intPtr = new std::vector<int*>; 
2
std::vector<int*> intPtr; // no need to make this a pointer. 
+0

이 예제에서는 필요가 없지만이 포인터는 작은 규모의 더 큰 프로젝트에서 발생한 문제의 복제본이기 때문에이 포인터를 만들었습니다. – Shippage

+0

@Shippage :'new std :: vector <>', _ever_에 대한 유즈 케이스가 없습니다. – ildjarn

0

당신과 같이 초기화한다 :

std::vector<int*> *intPtr = new vector<int*>();