2017-11-27 1 views
-2

pthread_create를 통해 배열 요소를 매개 변수로 전달할 때 몇 가지 문제가 있습니다.pthread_create를 통해 배열 (struct) 요소 전달

struct threadInfo { 
    int threadNumber; 
    int sleepTime; 
}; 

제가 (a 함수) 배열을 초기화 이런 :

I이 구조체가 잠시 루프에이어서

struct threadInfo info[1]; 

를 I 이렇게 :

int i = 0; 
... 
while (i < 2) { 
     pthread_mutex_lock(&countMutex); 
     if (threadsCount < MAX_THREAD) { 
       info[i].threadNumber = ++threadsCount; 
     pthread_mutex_unlock(&countMutex); 
       info[i].sleepTime = rand() % (10 + 1 - 1) + 1; 
       pthread_create(&threads[i], NULL, lawine, &info[i]); 
       i++; 
     } 
     else { 
       pthread_mutex_unlock(&countMutex); 
       break; 
     } 
    } 

threadsCount는 전역 변수입니다.

처음에는 잘 돌아갑니다 (info [0]). 하지만 두 번째 라운드 (정보 1) 값이 잘못되었습니다. the output

도와 주시겠습니까?

+0

게시하지 마십시오 링크로 출력을하고, 그렇지 않은 : 그것은 당신이 지금처럼 할당해야 요소의 수, 그래서 당신이 두 요소가하려는 경우 (따라서 및 info[1]에 액세스 할 수) 텍스트 사진을 게시하지만 텍스트를 게시하십시오. –

+0

배열을 (함수에서) 어떻게 초기화합니까? struct threadInfo info [];'*? –

+0

버그가 발생하면 [짧은, 자체 포함, 올바른 (컴파일 가능), 예] (http://sscce.org/)가 될 때까지 코드에서 필수적이지 않은 것을 잘라내는 것이 좋습니다. (a) 잘못 이해 한 것을 더 명확하게보고 이해할 수 있고 (b) 쉽게 파일로 저장하고 컴파일하고 자신을 도우려고 할 때 사용할 수있는 프로그램을 다른 사람들과 공유 할 수 있어야합니다. – ArjunShankar

답변

2

하나의 요소 만 포함하도록 선언 했으므로 배열의 범위를 벗어나지 만 2를 보유 할 것으로 예상됩니다.이 코드 줄의 대괄호 안의 숫자 ...

struct threadInfo info[1]; 

... 액세스 할 수있는 가장 높은 색인이 아닙니다.

struct threadInfo info[2]; 
+0

가끔은 작은 것들, 고마워요! –

관련 문제