有人能找出错误吗?纯 C 重新分配

标签 c malloc scanf realloc

我有这个代码:

int main() {
   int i=0, n=0;
   char sep=NULL;
   double **aero=(double**)malloc(sizeof(double*));
   *aero=(double*)malloc(2*sizeof(double));
   printf("Zadejte souradnice:\n");
   while (1) {
      aero=(double**)realloc(aero,(n+1)*sizeof(double*));
      for (i=0; i<n+1; i++) {
          aero[i]=(double*)realloc(aero[i],2*sizeof(double));
      }
      if ((scanf("[%lf,%lf]%c",&aero[n][0],&aero[n][1],&sep))==3 && (sep=='\n' || sep==' '))      {
            n++;     
            continue;
      } else if (!feof(stdin)) {
            printf("Nespravny vstup.\n");
            freeArray2D(aero,n);
            return 0;
      }
      break;
   }
}

它工作正常,但我只能扫描 19 次坐标(格式:[x,y])。然后它显示段错误(核心已转储)。我使用 Linux 编译器 gcc -Wall -pedantic main.c -lm 我不知道问题出在哪里。感谢您的帮助。

最佳答案

您永远不会将新的 malloced 缓冲区分配给 aero[1],而是将其中的垃圾传递给 realloc。也许您希望 aerorealloc 将内存初始化为零?

关于有人能找出错误吗?纯 C 重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20174771/

相关文章:

c - 段错误,不知道为什么

c - 高性能TCP服务器架构

c - 动态数组是在没有 malloc 的情况下分配的

c - C语言中如何删除链表?

c - 参数 2 的类型为 int * 并且想要读取文件

c - Scanf 特定字符到 C 中的数组中

c - scanf() 中不同数量的元素

ios - 在 mac os Sierra 上构建tensorflow示例ios代码时出错

c - 我是否可以通过 C 程序通过串口正确发送十六进制命令

C 程序在 Cygwin 中运行但在 Linux (Malloc) 中不运行