2014-02-12 5 views
0

코드 정의가 정의되지 않은 동작을 생성 할 수 있습니까?std :: thread 정의되지 않은 동작

unsigned int total_threads = 10; 
vector<thread> t(total_threads); 
unsigned int *nums = (unsigned int*)calloc(total_threads, sizeof(int)); 

for(unsigned int i = 0; i < 1000; i++) 
{ 
    for(unsigned int j = 0; j < total_threads; j++) 
     t[j] = thread(func_, std::ref(nums[j])); 

    for(unsigned int j = 0; j < total_threads; j++) 
     t[j].join(); 

    for(unsigned int j = 0; j < total_threads; j++) 
    { 
     cout << nums[j] << " "; 
     nums[j] = 0; 
    } 
} 
+2

'func_'이하는 일에 달려 있습니다. 그것이 단지 참조로 주어진 값을 수정하는 한, 나는 이것이 모두 잘 정의되어 있음을 확신한다. –

답변

4

예, calloc이 실패 할 수 있습니다. 반환 값을 확인하거나 std :: vector를 사용하십시오.

+0

왜 calloc가 실패 할 수 있습니까? 만약 남은 메모리가 남아 있다면 실패할까요? – Luka

+0

@ 루카 메모리를 할당 할 수없는 경우를 예로들 수 있습니다. 시스템이 선택하는 이유 때문에 메모리를 제공하지 않기로 결정할 수 있으므로 가능한 모든 반환 값의 경우를 처리해야합니다. http://en.cppreference.com/w/cpp/memory/c/calloc –

+0

좋은 점이 있지만 모든 것이 실패 할 수 있다면 파일을 쓸 수 없다면 오류를보고하는 방법은 무엇입니까? 파일 쓰기가 실패하면 어떻게됩니까? – Luka

관련 문제