2d动态分配

时间:2012-03-07 01:56:55

标签: c function 2d malloc allocation

我想分配动态的字符数组。所以我有上面的代码

      void initialize(char **document_table, int size){

      int x, i, j, M;

      printf("how many words every line: ");  scanf("%d", &M);

     document_table = malloc(sizeof(char) * size);
     for(x = 0; x < size; x ++) {
     document_table[x] = malloc(sizeof(char) * M);
      }


     for(i=0; i<N; i++){
    for(j=0; j<N; j++){

        scanf("%c",&document_table[i][j]);   
     }
      }
      }

但似乎在分配内存后该功能停止工作。

3 个答案:

答案 0 :(得分:2)

声明document_table = malloc(sizeof(char) * size);应该有sizeof(char*),因为2D数组是指向1D数组的指针数组。

答案 1 :(得分:1)

问题1:char** document_table本身是按值传递的。这意味着调用代码如:

char** document_table = 0;
initialize(document_table,2);
/* document_table still 0 here */

不会初始化传递的参数。可能想要使document_table返回值,或传递其地址。

问题2:N应为size

问题3:scanf("%c")M作为“单词”的定义不一致。 %c代表单个字符。此外,文本every line意味着面向行的输入,但这也不是扫描所寻找的。如果文档存储“单词”,则:

  • 文档是一个行数组
  • 一行是一个单词数组
  • 一个单词是一个字符数组

因此,文档实际上是一个3D数组字符。

答案 2 :(得分:0)

您应该在数组中分配指针:

document_table = malloc(sizeof(char*) * size);

注意sizeof()运算符

中的char*