я получаю сообщение об ошибке при динамическом распределении памяти в C - PullRequest
0 голосов
/ 10 апреля 2020

Я получаю ошибку сегментации (ядро сброшено) в следующем коде: -

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

int main()
{
    char text[100];

    int max = 0,ctr = 0;
    int j=0;
    printf("Enter the text: ");
    gets(text);
    int tokens = 1;
    for (int i =0; text[i] != '\0'; i++)
    {
        if (text[i] == ' ')
            tokens ++;

        ctr = 0;

        while (text[j] != ' ')
        {
            ctr ++;
            j++;
        }

        if (max < ctr)
            max = ctr;
        j++;
    }
    int r,c,p=0;
    r = malloc(sizeof(char)*tokens);
    c = malloc(sizeof(char)*max);
    char token[r][c];
    for (int k = 0; text[k] != '\0'; k++)
    {
        if (text[k] = ' ')
        {
            p++;
            continue;
        }
        token[p][k] = text[k];

    }

    for (int k = 0;k < r; k++)
    {
        for (int z=0; z<c; z++)
            printf(" %c",token[k][z]);
        printf("\n");
    }

    return 0;
}

Вопрос: -

Учитывая несколько строк текста, проанализируйте текст, чтобы отделить жетоны. Токен - это слово, разделенное пробелом. Храните токены как отдельные строки, максимальная длина которых не указана. Поддерживать одномерный массив указателей, указывающих на каждую строку. Пусть длина одномерного массива зависит от количества токенов. Кроме того, выделение памяти для каждого токена должно зависеть от количества символов в каждом токене.

...