程序输入3行数据运行正常,输入4行数据就运行不正常了,请大神解答?

本程序输入读入任意天数的浮点温度记录值,每天有6个记录,最后输入每天的平均值及每天的温度记录。请问,我输入3天的数据运行正常,为什么输入4天的数据运行就不正常了。多谢解答。
#define STDC_WANT_LIB_EXT1 1
#include
#include
#include
#include

#define BUF_LEN 100
#define READING_PER_DAY 6
#define INCR 1

int main(void)
{
char buf[BUF_LEN];
char *pstr=NULL;
char *ptr=NULL;
size_t day=0;
size_t capacity=0;
double **temperature=NULL;
double *result=NULL;
double average=0;

printf("Please enter 6 records of temperature for eachday.\n");
while(true)
{
    pstr=fgets(buf,BUF_LEN,stdin);
    if(!pstr)
    {
        printf("Error reading input.\n");
        return 1;
    }
    if(*pstr=='\n')
        break;
    if(day==capacity)
    {
        capacity+=INCR;
        temperature=realloc(temperature,capacity*sizeof(double*));
        result=realloc(result,capacity*sizeof(double));
    }
    *(temperature+day)=malloc(READING_PER_DAY*sizeof(double));
    for(size_t i=0;;++i)
    {
        temperature[day][i]=strtod(pstr,&ptr);
        if(pstr==ptr)
            break;
        else
            pstr=ptr;
        if(i>READING_PER_DAY)
        {
            printf("Please enter less than 6.\n");
            return 3;
        }
    }
    for(size_t j=0;j<READING_PER_DAY;++j)
    {
        result[day]+=temperature[day][j];
    }
    result[day]/=READING_PER_DAY;
    day++;
}
for(size_t k=0;k<day;++k)
{
    average+=result[k];
}
average/=day;
for(size_t k=0;k<day;++k)
{
    printf("Day %zd  %.1f  ",k+1,result[k]);
    for(size_t m=0;m<READING_PER_DAY;++m)
        printf("%-5.1f   ",temperature[k][m]);
    printf("\n");
    free(temperature[k]);
    temperature[k]=NULL;
}
free(result);
result=NULL;
free(temperature);
temperature=NULL;
printf("\n%.1f\n",average);
return 0;

}

*(temperature+day)=malloc(READING_PER_DAY*sizeof(double));
开辟新的空间没有初始化。

你是怎样输入的?输入的数据有哪些?错误是什么样的?做个截图发上来,看看。

如果没有问题,请及时点击采纳结贴。

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

#define STDC_WANT_LIB_EXT1 1
#define BUF_LEN 100
#define READING_PER_DAY 6
#define INCR 1
int main(void)
{
    char buf[BUF_LEN];
    char *pstr=NULL;
    char *ptr=NULL;
    size_t day=0;
    size_t capacity=0;
    double **temperature=NULL;
    double *result=NULL;
    double average=0;
    printf("Please enter 6 records of temperature for eachday.\n");
    while(true)
    {
        pstr=fgets(buf,BUF_LEN,stdin);
        if(!pstr)
        {
            printf("Error reading input.\n");
            return 1;
        }
        if(*pstr=='\n')
            break;
        if(day==capacity)
        {
            capacity+=INCR;
            temperature=(double **)realloc(temperature,capacity*sizeof(double*));//修改,增加类型转换
            result=(double *)realloc(result,capacity*sizeof(double));//修改,增加类型转换
        }
        temperature[day]=(double *)malloc(READING_PER_DAY*sizeof(double));//修改,增加类型转换
        for(size_t i=0;i<6;++i) //修改
        {
            temperature[day][i]=strtod(pstr,&ptr);//i=6时,破坏堆内存
            if(pstr==ptr)
                break;
            else
                pstr=ptr;
            if(i>READING_PER_DAY)
            {
                printf("Please enter less than 6.\n");
                return 3;
            }
        }
        result[day]=0;//增加
        for(size_t j=0;j<READING_PER_DAY;++j)
        {
            result[day]+=temperature[day][j];
        }
        result[day]/=READING_PER_DAY;
        day++;
    }
    average=0;
    for(size_t k=0;k<day;++k)
    {
        average+=result[k];
    }
    if(day>0) average/=day;//修改
    for(size_t k=0;k<day;++k)
    {
        printf("Day %2d:  %.1f  ",k+1,result[k]);//%zd改为%2d
        for(size_t m=0;m<READING_PER_DAY;++m)
            printf("%-5.1lf   ",temperature[k][m]);//改为lf
        printf("\n");
        free(temperature[k]);
        temperature[k]=NULL;
    }
    if(result)//修改
    {
        free(result);
        result=NULL;
    }
    if(temperature)//修改
    {
        free(temperature);
        temperature=NULL;
    }
    printf("\n%.1lf\n",average);//修改为%.1lf
    return 0;
}

运行结果:
图片说明

楼主不厚道啊,问题解决了,不采纳结贴了。