【问题标题】:Memory allocation for 2D array in CC中二维数组的内存分配
【发布时间】:2012-02-05 09:21:01
【问题描述】:

我正在编写一个多线程 C 程序,但出现错误。 我有一个二维数组 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行,但我无法弄清楚它是什么。

【问题讨论】:

  • 请为您的问题提供一个更好的标题

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您只分配了二维数组的一维。

    这是你如何分配第二个维度:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 2016-06-21
      • 2013-02-10
      • 2014-07-19
      相关资源
      最近更新 更多