0

デバッグ後、次のエラー メッセージが表示されます: 通常のブロックの後に HEAP CORRUPTION DETECTED (#55)。配列のサイズを大きくすると動作しますが(no_of_days+1)、それが正しいかどうかはわかりません。私は何を間違っていますか?

int main()
{

    int no_of_days=0;
    int no_operations=0;
    int *a;
    int i;
    FILE *pfile1=NULL;
    FILE *pfile2=NULL;
    char *filename1="input.txt";
    char *filename2="output.txt";

    pfile1=fopen(filename1, "r");
    if(pfile1==NULL)
    {
        printf("Error on opening the file %s.",filename1);
        return 0;
    }
    fscanf(pfile1,"%d%d",&no_of_days,&no_operations);
    a=(int*)malloc((no_of_days)*sizeof(int));
    if(a==NULL)
    {
        printf("Memory allocation failed.");
        return 0;
    }
    for(i=1;i<=no_of_days;i++)
    {
        fscanf(pfile1,"%d",&a[i]);
    }
    pfile2=fopen(filename2,"a");
    if(pfile2==NULL)
    {
        printf("Memory allocation failed!",filename2);
    }
    for(i=1;i<=no_of_days;i++)
    {
        fprintf(pfile2,"%d",a[i]);
    }
    free(a);
    fclose(pfile1);
    fclose(pfile2);
4

1 に答える 1

8
a=(int*)malloc((no_of_days)*sizeof(int));
/* ... */
for(i=1;i<=no_of_days;i++)

インデックスは 0 から始まるため、アクセスa[no_of_days]は不正です。forその行を次のように変更します。

for(i = 0; i < no_of_days; i++)
于 2012-08-20T19:02:08.520 に答える