1

昨日、プログラミング時間中はすべて問題ありませんでしたが、今日は奇妙なエラーが発生します。理由はわかりませんが、プログラムを実行した後、ターミナルで「中止されました(コアダンプ)」というエラーが表示されます。また、既に実行されているプログラムを実行しても問題は同じです。プログラムの例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define CHUNK 12

char *getWord(FILE *infile);

int main(int argc, char *argv[])
{
    char *word;
    FILE *infile, *outfile;
    int n = 0;

    if(argc != 2) 
    {
        printf("Error! Type:./file_name input_file output_file\n");
        abort();
    }

    infile = fopen(argv[1], "r");
    if(infile != NULL)
    {
        outfile = fopen(argv[2], "w");
        if(outfile == NULL)
        {
            printf("Error! Cannot open the output_file\n");
            abort();
        }
        else
        {
            while(!feof(infile))
            {
                word = getWord(infile);
                if(word == NULL)
                {
                    free(word);
                    abort();
                }

                n++;
                if(n % 2 == 0)
                {
                    fputs(word, outfile);
                    fputs(" ", outfile);
                }
                else 
                {
                    fputs(word, outfile);
                    fputs("(", outfile);
                    fputs(word, outfile);
                    fputs(")", outfile);
                    fputs(" ", outfile);
                }
                    free(word);
            }
        }
    }
    else
    {
        printf("Error! Cannot open the input_file\n");
        abort();
    }

    fclose(infile);
    fclose(outfile);
    return 0;
}

char *getWord(FILE *infile)
{
    char *word, *word2;
    int length, cursor, c;

    word = malloc(sizeof(char)*CHUNK);
    if(word == NULL)
    {
        return NULL;
    }

    length = CHUNK;
    cursor = 0;

    while(isalpha(c = getc(infile)) && !feof(infile))
    {
        word[cursor] = c;
        cursor++;

        if(cursor >= length)
        {
            length += CHUNK;
            word2 = realloc(word, length*sizeof(char));
            if(word2 == NULL)
            {
                free(word2);
                return NULL;
            }
            else word2 = word;
        }
    }

    ungetc(c, infile);
    word[cursor] = '\0';
    return word;
}

そしてエラー:

Error! Type:./file_name input_file output_file
Aborted (core dumped)
4

2 に答える 2