有人能找出错误吗?纯C realloc

有人能找出错误吗?纯C realloc,c,malloc,scanf,realloc,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(

我有这个密码:

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;
   }
}
intmain(){
int i=0,n=0;
char sep=NULL;
双倍**航空=(双倍**)malloc(双倍*);
*aero=(双*)malloc(2*sizeof(双));
printf(“Zadejte souradnice:\n”);
而(1){
aero=(双**)realloc(aero,(n+1)*sizeof(双*);

对于
aero[i]=(double*)realloc(aero[i],2*sizeof(double))
中的(i=0;i,如果
i==n
,则
aero[i]
未初始化。您不应该在未初始化的指针上调用
realloc

您永远不会将新的
malloc
ed缓冲区分配给
aero[1]
,但将垃圾传递到
realloc
。也许您希望
aero
realloc
将内存初始化为零?

您的具体问题是
realloc
一个指针,
aero[n]
,它在一开始就从未
malloc
过(不一定是空的).那是灾难的秘诀

你也有另一个问题,虽然这是一个不必要的工作问题,而不是致命的缺陷。你正在重新分配每一个
aero[]
循环中的变量,当它们的内容或大小没有实际改变时。在我看来,在循环中您只需增加第一级内存的大小
aero
,并为其新元素分配内存:

while (1) {
    aero = realloc (aero, (n+1) * sizeof (double*));
    aero[n] = malloc (2 * sizeof (double));
    :
您会注意到我已经删除了
malloc
返回值的强制转换。这种强制转换在C中是不明智的,因为它可以隐藏某些细微的错误。C完全能够将
void*
返回值隐式转换为任何其他指针类型

当然,你永远不应该假设你的内存分配会起作用——我会检查
NULL
的返回值,如果找到了,就立即退出


我唯一的另一个问题(当然除了我不能阅读捷克语)将
char sep
设置为
NULL
NULL
通常是为指针而不是字符保留的,因此如果您将其初始化为
\0

会更合理,请向我们展示一些示例输入,以及
freearay2d
函数。检查这可能会有帮助:OT:
sep=NULL;
应为空
char sep='\0';
..=0;