7

文字列を解析したいのですが、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

4

3 に答える 3

1

strsep 関数は最初の引数を更新します (したがって、見つかったトークンの直後を指します)。malloc によって返された値を別の変数に格納し、この変数を解放する必要があります。

于 2014-01-27T14:18:17.097 に答える