【问题标题】:2d dynamic allocation二维动态分配
【发布时间】:2012-03-07 01:56:54
【问题描述】:

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

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

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

【问题讨论】:

  • 您的嵌套循环使用相同的索引变量i,并一直将第一个元素的地址传递给scanf
  • 此外,N 没有定义或初始化。我想你的意思可能是M。但如果是这种情况,您不希望 size 作为函数参数传入,而是希望根据用户输入的内容进行计算?
  • xm iand j 输入错误。但这不是问题所在,我有大小代替 N。但扫描第一个程序停止后它不起作用。

标签: c function 2d malloc allocation


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    问题 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 字符数组。

    【讨论】:

      【解决方案3】:

      你应该在你的数组中分配指针:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-03
        • 2016-08-11
        • 2013-11-24
        • 1970-01-01
        • 2015-02-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多