Ошибка при выделении памяти - C (СИ)

Узнай цену своей работы

Формулировка задачи:

что-то не так с выделением памяти, после запуска выдает ошибку, не могу понять где налажал
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
 
int bukv (char a)
{
    if (a>='a' && a<='z')
    {
        return 1;
    }
    return 0;
}
 
char* ExtractWords(char const * str)
{
  char *d=NULL, *tmp = NULL;
  int i = 0, j = 0, flag = 0, k = 0;
    d = (char*)malloc(sizeof(char));
    while(str[i]!='\n')
  {
    if(bukv(str[i]))
    {
      tmp = (char*)realloc(d, (j+1)*sizeof(char));
      d[j] = str[i];
      j++;
      flag = 0;
    }
    else
    {
        if(flag == 0)
        {
        tmp = (char*)realloc(d, (j+2)*sizeof(char));
        if(tmp == NULL)
        {
            free(d);
            return 0;
        }
        d = tmp;
        d[j] = ',';
        d[j+1] = ' ';
        j = j+2;
        flag = 1;
      }
    }
    i++;
    d[j] = 0;
  }
  return d;
}
int main (void)
{
  char *str;
  int l=0;
  char *tmp, *tmp1;
  setlocale(LC_ALL, "Russian");
  printf("\tВыбор слов\n");
  printf("Введите строку: \n");
  str = (char*)malloc(sizeof(char));
  while(1)
  {
    while((str[l] = (char)getchar())!=10)
    {
      l++;
      tmp = (char*)realloc(str,(l+1)*sizeof(char));
      if(tmp == NULL)
      {
   
          free(str);
          return 0;
      }
      str=tmp;
    }
     if(l == 0)
     {
         free(str);
         return 0;
     }
  //str[l]='\0';
  tmp1 = ExtractWords(str);
  if(tmp1 == NULL)
  {
      free(str);
      return 0;
  }
  printf("%s\n",tmp1 );
  
  free(str);
  free (tmp1);
  }
  return 0;
}

Решение задачи: «Ошибка при выделении памяти»

textual
Листинг программы
struct memory_container {
    char *data;
    size_t capacity;
    size_t used;
};

Объяснение кода листинга программы

  1. Объявляется структура memory_container, которая содержит указатель на выделенную память data, размер контейнера capacity и количество используемой памяти used.
  2. В структуре memory_container используется тип size_t для хранения размеров памяти, что позволяет работать с выделенной памятью динамически.
  3. В структуре memory_container используется указатель data, который указывает на начало выделенной памяти.
  4. В структуре memory_container используется переменная capacity, которая хранит размер выделенной памяти.
  5. В структуре memory_container используется переменная used, которая хранит количество используемой памяти.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы