Я пытаюсь перекодировать функцию strcat с изображением автомаллока внутри него. Я вижу в нескольких тестах, что в моей функции есть некоторые утечки данных (я не знаю правильного слова).утечки в my_strcat с malloc
Вот мой код:
char *my_strcat(char *a, char *b)
{
char *result;
int i;
int j;
int la;
int lb;
la = -1;
lb = -1;
while (a[++la] != '\0');
while (b[++lb] != '\0');
result = malloc(sizeof(char) * (la + lb) + 1);
i = -1;
while (a[++i] != '\0')
result[i] = a[i];
j = -1;
while (b[++j] != '\0')
result[i + j] = b[j];
result[i + j] = '\0';
return (result);
}
Так что, когда я пытаюсь использовать мой my_strcat в цикле в то время как с некоторыми строками один длинами я получаю:
a.out: malloc.c:2392: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
Я пытаюсь найти где происходит утечка памяти. Но я не могу понять.
Вот вызывающая часть:
while (!is_line_ended(read_result))
{
read(fd, read_result, READ_SIZE);
result = my_strcat(result, read_line(read_result, fd));
}
Вот MY_STRLEN:
# define MY_STRLEN(s) (sizeof(s)/sizeof(s[0]))
Пожалуйста, обратите внимание, что я ограничен в один файл и один заголовок. Я ограничен 5 функциями по файлу, и мне не разрешено использовать строковые функции.
Почему вы должны '|' в конце каждой строки? – mch
Э-э, я их не вижу:/Возможно, потому, что я скопировал из emacs – Orionss
_one-length strings_, что означает t? – LPs