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.

这里的原始问题:使 valgrind 能够在 c++ 需要时读取用户输入

编辑:

因此,对于您的情况,您可以尝试:

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

& 在另一个终端中,使用

cat > /tmp/abcd
于 2012-12-05T07:23:58.133 回答