Ошибка сегментации для программы, которая индексирует слова из файла - PullRequest
1 голос
/ 20 февраля 2020

Я получаю ошибку сегментации для программы C, которая сначала читает символы данного файла, идентифицирует слова, индексирует слова и печатает первое слово. Я давно устраняю неполадки, но, похоже, не могу найти причину ошибки.

#include <stdio.h>
#include <stdlib.h>
#include <cs50.h>
#include <string.h>

int main (int argc, char *argv[])
{
    if (argc != 2)
    {
        printf("Usage: ./test15 text\n");
        return 1;
    }
    char *file = argv[1];
    FILE *ptr = fopen(file, "r");
    char ch;
    int i = 0;
    int k = 0;
    int j = 0;
    char *text = malloc(sizeof(char));
    string word[k];
    while ((ch = fgetc(ptr)) != EOF)
    {
        text[i] = ch;
        if (ch == ' ')
        {
            for (int l = j; l < i; l++)
            {
                strcat(word[k], &text[l]);
            }
            k++;
            j = i;
        }
        i++;
    }
    printf("%s\n", word[0]);
    return 0;
}

1 Ответ

1 голос
/ 20 февраля 2020

Точно так же, как сказал @Zen, SEGFAULT произойдет, если вы попытаетесь получить доступ к области памяти, которой вам не разрешено или не выделено.

Ваша программа завершает работу сразу после первой итерации, потому что i становится 1 в этот момент, а text[1] становится недоступным, потому что text был выделен размер только одного символа: char *text = malloc(sizeof(char)); здесь.

Тем не менее, я не проверял ваш алгоритм сейчас, поэтому я Я только предоставляю начальное наблюдение. Если какие-либо ошибки все еще появляются, не стесняйтесь размещать сообщения в этой теме здесь.

Best.

...