2011-11-06 6 views
0

클래스 RWLock이 있고 RWLock에 대한 포인터의 2 차원 벡터 인 vector<vector<RWLock*>>을 만들려고합니다. 내가하고 있어요 것은 :이 프로그램을 실행할 때벡터 <벡터 <Foo*>>을 채우는 방법은 무엇입니까?

vector<vector <RWLock*>> board = vector<vector <RWLock*>>(height); 
RWLock* lock; 
for(int i = 0 ; i < height ; ++i) 
{ 
    board[i] = vector <RWLock*>(width, NULL); 
    for(int j = 0 ; j < width ; ++j) 
    { 
     lock = (RWLock*) malloc(sizeof(RWLock*)); 
     *lock = RWLock(); 
     board[i][j] = lock; 
    } 
} 

은, 그러나, 나는

*** glibc detected*** ./test: free(): invalid pointer: 0x[some hexa] *** 

내가이 최대한 빨리 전화로 팝업 것을 알고이 충분히 디버깅 한 수 "보드 [i] = 벡터 (너비, NULL); " 두 번째로, 나는 1과 동등합니다. 나는 그 문제가 무엇인지 알 수 없습니다.

미리 감사드립니다.

편집 : 인터넷 연결없이 VM의 실제 코드를 쓰기 때문에 코드를 손으로 복사해야했습니다. 여기에있는 코드는 실제 코드와 일치합니다.

+2

왜 안'보드를 할당 할 경우,

lock = new RWLock; board[i][j] = lock; 

또는 [I]는 [J])을 (새으로 rwlock을 =; '? –

+0

'j'가 다른 곳에 정의되어 있습니까? 내부 루프는'i' 대신'j'를 사용해야합니다. – Jacob

+0

두 번째 루프도 너비가 아니라 높이 여야합니다. 어쨌든 j가 선언 되었습니까? –

답변

3

및 선언되지 J, 당신은 여기에 문제가 RWLock을 생성하지만 결코 RWLock을 생성하지 않습니다.

임시 RwLock()을 구성하는 두 번째 줄에 있고 위에서 언급 한 바와 같이 RWLock이 아닌 아직 첫 번째 RWLock의 할당 연산자를 호출합니다. 아직 작성되지 않았기 때문에 RWLock이 아닙니다. 이와 같이 대입 연산자를 호출하면 정의되지 않은 동작이 발생합니다.

단지 새로운 대신 사용 : 당신이 정말 malloc에, 새로운 용도 배치

+0

고마워, 나는 C++의 OOP 부분에 매우 녹슬다. 그게 내 문제를 해결 한 것 같아. i와 j는 손으로 코드를 복사해야했기 때문에 내가 만든 바보 같은 실수였습니다. –

1

루프에서 동일한 for-loop 변수 i을 사용하고 있습니다. 내부 루프 변수를 j으로 변경하면 제대로 작동합니다.

lock = (RWLock*) malloc(sizeof(RWLock*)); 
    *lock = RWLock(); 
    board[i][j] = lock; 

당신을위한 공간을 할당됩니다 :)

당신의 내가 vairable 다시 사용에 대한 토피 Ojala의 관심뿐만 아니라
관련 문제