2014-04-09 2 views
-1

스레드가 제대로 작동하는 동안 스레드가 작동을 마친 후 배열의 출력이 좋지 않은데, 아무도 나를 도울 수없는 이유를 설명하는 아래 코드에 문제가 있습니다 !!!!!포인터와 스레드의 배열?

#include<iostream> 
#include <thread> 

using namespace std; 


class Case1{ 

public: 
int *pplAges[5]; 
Case1(){ 
*pplAges= new int[5]; 
} 

void addToAges(int Age, int index){ 
pplAges[index] = new int; 
*pplAges[index] = Age; 
cout<< *pplAges[index] <<endl; 

} 


}; 

void f1(Case1 passedObj,int age,int index) 
{ 

passedObj.addToAges(age,index); 

} 

void main(){ 

Case1 C; 

thread t1(f1,C,13,0); 
t1.join(); 

thread t2(f1,C,14,2); 
t2.join(); 

cout<<*C.pplAges[0]<<endl; 
cout<<*C.pplAges[2]<<endl; 
} 
+0

-1을 전달하십시오. – peterh

+0

코드 들여 쓰기 – zoska

답변

2

스레드는 인수를 복사하므로 스레드는 절대로 C을 변경하지 않습니다.

void f1(Case1& passedObj, int age, int index) 
{ 

    passedObj.addToAges(age, index); 

} 

void main(){ 

    Case1 C; 

    thread t1(f1, std::ref(C), 13, 0); 
    t1.join(); 

    thread t2(f1, std::ref(C), 14, 2); 
    t2.join(); 



    cout << *C.pplAges[0] << endl; 
    cout << *C.pplAges[2] << endl; 
} 
1

시도가

void f1(Case1 passedObj,int age,int index) 

void f1(Case1* passedObj,int age,int index) 
을 변경하려면 다음을 명시 적으로 참조를 원하는 경우 표준 : REF (또는 상수 참조에 대한 표준 : CREF)로 포장해야

그리고 들여 쓰기가 없어서 스레드 &C