C - освобождение строки после цикла для - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть эта простая функция для экстраполяции подстроки в строке.

char* substr(const char *string, size_t start, size_t end) {

  const char *char_start = &string[start];
  const char *char_end = &string[end];

  char *substring = (char *) calloc(1, char_end - char_start + 1);
  memcpy(substring, char_start, char_end - char_start + 1);

  return substring;
} 

У меня есть только одна calloc, которая создает возвращаемую строку.Я пытаюсь код в цикле, для экстраполяции подстроки массива строк.Это основной код, где я тестирую функцию:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  size_t i;
  char *tmp = NULL;
  char *kmer_array[5] = {"GTGAA", "ACGGT", "AACGG", "AGTGA", "TGAAC"};

  for ( i = 0; i < 5; i++ ) {
    tmp = substr(kmer_array[i], 1, strlen(kmer_array[i]));
  }  

  free(tmp);      

  return 0;
} 

Но когда я тестирую код с помощью valgrind, это вывод ( ссылка ).

Я нене понимаю, где я потерял байт

1 Ответ

2 голосов
/ 27 апреля 2019

Вы устанавливаете tmp внутри цикла 5 раз, но освобождаете только последний (вне цикла)

...