我有这个简单的函数来推断字符串中的子字符串。
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 )。
我不明白我在哪里丢失了字节
最佳答案
你在循环内设置了 5 次 tmp
但只释放了最后一次(在循环外)
关于C - 循环后释放字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883690/