realloc():无效的下一个大小已中止(核心已转储)

问题描述 投票:0回答:1

我正在尝试编写一段代码,该代码必须为循环的某些周期扩展 1 的 malloc 数组的内存(我需要存储函数的零)。但编译后出现这个错误:

realloc(): invalid next size
Aborted (core dumped)

有人知道这个错误的原因吗?

这是代码:

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

#define ARGMAX 5
#define ARGUMENTS_ERROR -3
#define REALLOC_FAILURE -2

typedef struct{
  double x;
  double y;
}point;



point Func(point p,double dt);
double Tzero(double x1,double x2,double dt,int i);

//START
int main(int argc,char* argv[]){

  int n,i,nzeri=0;
  point p,pp;
  double *tzeri, *temp;
  tzeri=(double *)malloc(0*sizeof(double));
  pp.x=atof(argv[1]);
  pp.y=atof(argv[2]);
  double dt=atof(argv[3]);
  double tmax=atof(argv[4]);

  n=(int)tmax/dt;
  for(i=0;i<n;i++){
    p=Func(pp,dt);
    printf("%lf %lf\n",dt*(i+1),p.x);
    if(pp.x*p.x<=0.){
      nzeri++;
      temp=(double *)realloc(tzeri,nzeri*sizeof(double));
      if(temp==NULL){
    printf("--------ERROR-------\nrealloc failed\n");
    exit(REALLOC_FAILURE);
      }
      tzeri[nzeri-1]=Tzero(pp.x,p.x,dt,i);
      printf("----------\n%d %lf\n----------\n",nzeri,tzeri[nzeri-1]);
    }
    
    pp.x=p.x;
    pp.y=p.y;
  }
  
}//END


point Func(point p,double dt){
  point p2;
  p2.x=p.x-0.1;
  if(p2.x<-3)p2.x=3.;
  return p2;
}


double Tzero(double x1,double x2,double dt,int i){
  double d,t;
  d=x1*dt/(x1-x2);
  t=dt*i+d;
  return t;
}

我期望 tzeri 的大小以像 nzeri 一样的方式增长一个“单元格”(一个 sizeof(double)),但它似乎直到第五次重新分配才起作用,所以它不可能是语法错误。

希望尽快有消息,谢谢

c dynamic-memory-allocation realloc
1个回答
0
投票

您的代码永远不会为

tzeri
分配新值。它首先将
tzeri
设置为
tzeri=(double *)malloc(0*sizeof(double));
。后来,它用
temp=(double *)realloc(tzeri,nzeri*sizeof(double));
分配新空间,但它从未将该值分配给
tzeri
。检查
temp
不为空后,您需要
tzeri = temp;

© www.soinside.com 2019 - 2024. All rights reserved.