动态分配二维数组时出现 C 段错误

标签 c arrays

我正在尝试编写一个 c 程序,它将从 Linux 管道获取输入并 将每个单词直到遇到\n 时放入数组中。然后输出单词。它在数组包含少于 3\n 时有效,但如果输入中有 3\n`s,它会给我段错误。这是我写的代码,请帮忙。我是编程新手,所以请尽量完整地使用代码。

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int out=0;
  int in=0;
  char **arr2D;
  int i;
  int flag = 1;
  arr2D=(char**)malloc(out*sizeof(char*));
  for(i=0;i<out;i++)
    arr2D[i]=(char*)malloc(in*sizeof(char*));

  while (!feof(stdin))
    {
      in = in +1;
      arr2D[out]=(char*)realloc(arr2D[out],(in)*sizeof(char*));
      scanf("%c",&arr2D[out][i]);

      i=i+1;
      if(arr2D[out][i-1]=='\n')
        {
        out=out+1;
        arr2D=(char**)realloc(arr2D,out*sizeof(char*));
        i=0;
        in=0;
        }
    }

  int out2=0;
  int in2=0;
  do
    {
      do
        {
          printf("%c",arr2D[out2][in2]);
          in2++;
        }
      while(in2<=in-1);
      out2++;
      in2=0;
    }
  while(out2<=out);

  printf("\n");
  return 0;
}

最佳答案

以下代码可以正常工作:

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[])
{
    int out = 1;
    int in = 1;
    char **arr2D;
    int i = 0;

    arr2D = malloc(out * sizeof(char *));
    for (i = 0; i < out; i++)
          /* IMPORTANT */
          arr2D[i] = malloc(in * sizeof(char));

    while (!feof(stdin)) {

        scanf("%c", &arr2D[out - 1][in - 1]);

        in++;
        if (arr2D[out - 1][in - 2] == '\n') {
            arr2D[out - 1][in - 2] = '\0';
            out++;
            arr2D = realloc(arr2D, out * sizeof(char *));
            /* IMPORTANT */
            arr2D[out - 1] = NULL;
            in = 1;
        }

        /* IMPORTANT */
        arr2D[out - 1] = realloc(arr2D[out - 1],in * sizeof(char));


    }

    int out2 = 0;
    do {
        printf("%s\n", arr2D[out2++]);
    } while(out2 < out);
    printf("\n");
    return 0;
}

关于动态分配二维数组时出现 C 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387625/

相关文章:

C - 查找每个单词在输入中出现的次数

javascript - 具有多个参数的 indexOf

c++ - 与最大大小相关的数组和 vector 之间的区别?

arrays - 如何从JSON传递List <dynamic>到List <MyModel>?

c - unistd.h 不可用,如何使用 fork()

c - 写入标准输出和文件

c++ - MySQL源代码中 "struct PSI_thread"的定义在哪里?

c - 函数返回一个没有相关参数的条件函数

java - Hibernate 和 PostgreSQL 中具有 UserType 的数组 --> MappingException

c - 使用我自己的 strcopy 函数时变空