二维数组的动态分配

时间:2016-12-16 16:45:36

标签: c pointers dynamic-allocation

我有一个动态创建一个bisimentional数组的函数,该数组存储一系列单词,直到" gata"介绍。

问题是它崩溃了,我想行

*(*words+*dim-1) = (char*)calloc(MAX_DIM,sizeof(char));

可能是其中一个问题。这条线有什么问题?

void read_words(char ***words,int *dim)
    {
      char buff[100];
      *words = (char**)calloc(*dim,*dim*sizeof(char*));
      while(strcmp(buff,"gata"))
       {
         printf("the new word : ");
         scanf("%100s", buff);
         if(strcmp(buff,"gata"))
          {
            dim++;
            *words = (char**)realloc(words,*dim*sizeof(char*));
            if(words == NULL)
             {
               printf("Memory allocation failed !\n");
               exit(0);
             }
            *(*words+*dim-1) = (char*)calloc(MAX_DIM,sizeof(char));
            strcpy(*(*words+*dim-1),buff);
          }
       }
    }

int main()
{
  char **words;
  int i,dim = 0;

  read_words(&words,&dim);

  for (i = 0; i < dim; i++)
    free(&words[i]);
  free(words);
  return 0;
}

1 个答案:

答案 0 :(得分:1)

主要问题在于

  while(strcmp(buff,"gata"))

其中buff是一个自动局部变量并且未初始化。使用内容调用undefined behavior。在使用之前,您需要初始化buff

那就是说,

  • scanf("%100s", buff);开启了off-by-one的可能性,即scanf("%99s", buff);。{/ li>
  • dim++;递增指针本身,而不是指针指向的值。