0

これはコードです:

char* inputString(){
    int n = 5;
    int size = n;
    char* const_str = (char*)malloc((n+1)*sizeof(char));
    char* substring = (char*)malloc((n+n)*sizeof(char)); /*here*/
    char*p;
    while((fgets(const_str,n,stdin)!=NULL)&&(strchr(const_str,'\n')==NULL)){
        strcat(substring,const_str);
        size += n;
        substring = (char*)realloc(substring,size*sizeof(char)); /*here*/
        }
    strcat(substring,const_str);
    size += n;
    substring = (char*)realloc(substring,size*sizeof(char)); /*here*/
    /*
    printf("<%s> is \n",const_str);
    printf("%s is \n",substring);
    printf("%d is \n",size);
    */
    if ((p=strchr(substring,'\n'))!=NULL){
        p[0]='\0';
    }
    if(feof(stdin)){
        changeToFull();
    }
    return substring;
}

valgrindでは機能しません。

ここでメモリリークが発生していると思いますが、この関数をvalgrind用に書き直す良い解決策が見つかりません。

助けてください!

4

1 に答える 1

0

試したことはありませんが、SOに関する質問でこれを見つけました:

--input-fd=<number> [default: 0, stdin]
          Specify the file descriptor to use for reading  input  from  the
          user.  This  is  used whenever valgrind needs to prompt the user
          for a decision.

ここでの元の質問: c++ が必要なときに valgrind がユーザー入力を読み取れるようにする

編集:

したがって、あなたの場合、次を試すことができます:

mkfifo /tmp/abcd
exec 3</tmp/abcd
valgrind_command...... --input-fd=3

& 別の端末で使用

cat > /tmp/abcd
于 2012-12-05T07:23:58.133 に答える