Загрузка...

Почему крашится программа после выполнения?

Тема в разделе C/C++ создана пользователем Kentaur 16 дек 2021. 183 просмотра

  1. Kentaur
    Kentaur Автор темы 16 дек 2021 https://t.me/kentavrwork_bot 94 14 май 2019
    После выполнения и вывода результата консоль с программой прекращает свою работу через примерно 4-5 секунд. Предполагаю что это связано с динамической памятью. Кому не сложно прошу подсказать как это исправить )
    Код
    #include <stdio.h>
    #include <stdlib.h>

    int strConvent(char *s, char ** parts)
    {
    int r = 0;
    while (*s)
    {
    if (*s != ' ')
    {
    char *ptr = parts[r++];
    do
    {
    *(ptr++) = *(s++);
    } while (*s && *s != ' ');
    *ptr = '\0';
    }
    else
    s++;
    }
    return r;
    }

    int strlen(char *arr)
    {
    int i = 0;
    while (*(arr + i) != '\0')
    {
    i++;
    }
    return i;
    }

    int main(){
    int count = 0;
    int k = 0;
    char* arr = (char*)malloc(sizeof(char) * 100);
    char ** parts = (char**)malloc(sizeof(char*) * 100 );
    char* word = (char*)malloc(sizeof(char) * 100);
    for (int i = 0; i < 100; i++)
    {
    parts[i] = (char*)malloc(100 * sizeof(char));
    }
    printf("Input the string: ");
    gets(arr);
    printf("Input the word: ");
    gets(word);
    strConvent(arr, parts);
    free(arr);
    printf("Result: ");
    for(int j = 0; parts[j][0]!='\0'; j++){
    for(int l = 0; parts[j][l]!= '\0'; l++){
    if(parts[j][l] == word[l]){
    count++;
    }
    }
    if(count == (strlen(word))){
    printf("%d ", j+1);
    }
    count = 0;
    }
    free(parts);
    free(word);

    getchar();
    getchar();
    }
     
  2. KinetiK
    KinetiK 17 дек 2021 20 066 18 янв 2020
    System (“pause”); перед return 0; поставь
     
    1. KinetiK
      KinetiK, и return 0 в конце main
  3. brediska
    brediska 17 дек 2021 Заблокирован(а) 2794 30 май 2021
    Kentaur, у Вас во всех адресах строк, которые оказываются ненужными, мусор.
    Там, естественно, нет нуля и Вы начинаете по ним работать. Последствия предсказуемы :smile:
    Исправляется легко :smile: Вы же подсчитываете число слов! Почему бы не использовать это?
    C
    48    k = strConvent(arr, parts);
    49 free(arr);
    50 printf("Result: ");
    51 for (int j = 0; j < k; j++) {
     
Top
Загрузка...