【问题标题】:C - Freeing string after cycle forC - 循环后释放字符串
【发布时间】:2019-09-16 22:00:27
【问题描述】:

我有这个简单的函数来推断字符串中的子字符串。

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 测试代码时,这是输出 (link)。

我不明白我在哪里丢失了字节

【问题讨论】:

  • 你分配了五次,但只有一次免费。

标签: c memory valgrind


【解决方案1】:

你在循环内设置tmp 5 次,但只释放最后一个(循环外)

【讨论】:

  • 哦!非常感谢
猜你喜欢
  • 1970-01-01
  • 2017-12-14
  • 1970-01-01
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
  • 2019-02-22
相关资源
最近更新 更多