文字列を解析したいのですが、strsep
関数を使用します:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[] = "Marco:Q:2F7PKC";
char *token1, *token2, *token3;
char *r = malloc(30);
strcpy(r, str);
token1 = strsep(&r, ":");
token2 = strsep(&r, ":");
token3 = strsep(&r, ":");
printf("tok1 = %s\n", token1);
printf("tok2 = %s\n", token2);
printf("tok3 = %s\n", token3);
free(r);
return 0;
}
関数はうまく機能しますが、valgrindを起動すると、割り当てられた文字列char * r
が正しく解放されません (確実に失われます: 1 ブロックで 30 バイト)。
その理由と、おそらくstrsepを呼び出さずに同じことを行う別の方法があるかどうかを知りたいです。
私はvalgrindを呼び出しますvalgrind --tool=memcheck --leak-check=full --show-reachable=yes ./a.out