C中二维数组的内存分配

时间:2012-01-08 14:19:55

标签: c memory-management multidimensional-array dynamic-arrays

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

int **worker_table;

并在main中分配如下:

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

这是工人职能:

    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行出了什么问题,但我无法弄清楚它是什么。

2 个答案:

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

我建议您阅读a good book on C

答案 1 :(得分: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];