Ошибка при выделении памяти - 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; };
Объяснение кода листинга программы
- Объявляется структура
memory_container
, которая содержит указатель на выделенную памятьdata
, размер контейнераcapacity
и количество используемой памятиused
. - В структуре
memory_container
используется типsize_t
для хранения размеров памяти, что позволяет работать с выделенной памятью динамически. - В структуре
memory_container
используется указательdata
, который указывает на начало выделенной памяти. - В структуре
memory_container
используется переменнаяcapacity
, которая хранит размер выделенной памяти. - В структуре
memory_container
используется переменнаяused
, которая хранит количество используемой памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д