Ошибка при выделении памяти - 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, которая хранит количество используемой памяти.