C中二维数组的内存分配

我正在写一个multithreadingC程序,我有一个错误。 我有一个全局声明的2D数组array worker_table

 int **worker_table; 

并在主要分配如下:

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

这是工作者function:

  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; 

错误发生在第234行之前,我认为第233行出了什么问题,但我无法弄清楚它是什么。

你的分配是错误的。 它应该是这样的:

 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); 

我建议你读一本关于C的好书

您只分配了2d数组的一个维度。

这是你可以分配第二个维度的方法:

 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];