0

멀티 스레드 C 프로그램을 작성하고 있는데 오류가 있습니다. 다음과 같이C에서 2D 배열에 대한 메모리 할당

int **worker_table; 

그리고 주에 할당 :

void *Worker(void *worker_id) 
    { 

my_id = (int)worker_id; //id of the worker 
printf("Line 231\n"); 
printf("My id is %d\n",my_id); 
my_customer = worker_table[my_id][1];//line 233 
printf("Line 234\n"); 
int my id; 

오류가 라인 전에 발생합니다

worker_table  = (int**) calloc(number_of_workers*2,(sizeof(int))); 

이 작업자 기능입니다 나는 2 차원 배열 array worker_table과 같이 전 세계적으로 선언해야 234, 내가 잘못 생각한 것은 233 행에 있지만, 나는 그것이 무엇인지 알 수 없다.

+0

질문에 대한 더 나은 헤드 라인을 제공하십시오

는 두 번째 차원을 할당 할 수있는 방법입니다 –

답변

4

할당이 잘못되었습니다. 그것은 다음과 같이해야합니다 :

worker_table = calloc(number_of_workers,(sizeof(int*))); 
for(int i = 0; i < 2; ++i) 
{ 
    worker_table[i] = calloc(2, sizeof(int)); 
} 

그리고 해방 절차가 있어야한다 :

for(int i = 0; i < 2; ++i) 
{ 
    free(worker_table[i]); 
} 
free(worker_table); 

난 당신이 당신은 당신의 2 차원 배열의 한 차원을 할당 한 a good book on C

1

읽어야하는 것이 좋습니다. 일부 곱셈을 사용하여

worker_table = malloc(number_of_workers * (sizeof(int*))); 
for(size_t i = 0; i < 2; ++i) 
    worker_table[i] = calloc(2, sizeof(int)); 

또는 액세스합니다 :

int* worker_table = calloc(number_of_workers*2,(sizeof(int))); 
my_customer = worker_table[x + y * number_of_workers];