c-2d动态分配



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

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

但是似乎在分配了存储器之后,该功能停止工作。

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

Issue 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意味着面向行的输入,但这不是扫描所要寻找的。如果文档存储"单词",则:

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

因此,文档实际上是一个由字符组成的三维数组。

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

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

注意sizeof()运算符中的char*

最新更新