Allocation de mémoire pour un tableau 2D en C

J’écris un programme C multithread et j’ai une erreur. J’ai un tableau de array worker_table 2D array worker_table déclaré globalement comme:

 int **worker_table; 

Et alloué en principal comme suit:

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

C’est la fonction worker:

  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; 

L’erreur se produit avant la ligne 234, je pense que ce qui ne va pas, c’est à la ligne 233, mais je ne peux pas comprendre ce que c’est.

Votre allocation est fausse. Cela devrait être comme ça:

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

Et la procédure de libération devrait être:

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

Je suggère que vous devriez lire un bon livre sur C

Vous n’avez alloué qu’une seule dimension de votre tableau 2D.

Voici comment vous pouvez affecter la deuxième dimension:

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

Ou accédez-y en utilisant une multiplication:

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