rros de @Valgrind causados por pclose () no Mac OS X
Estou recebendo erros do valgrind ao tentarpclose()
um tubo aberto anteriormente compopen()
. Os erros ocorrem no Mac OS X, mas não no Linux. Considere o seguinte exemplo:
#include <stdlib.h>
#include <stdio.h>
int main() {
FILE *fp;
char buf[4096];
if (!(fp = popen("ls", "r")))
exit(-1);
while (fscanf(fp, "%s", buf) == 1)
printf("%s\n", buf);
pclose(fp);
return 0;
}
Eu recebo os seguintes erros do valgrind em um Mac (OS X 10.6.7, valgrind versão 3.6.0), exceto se eu remover opclose()
ligar
==21455== Conditional jump or move depends on uninitialised value(s)
==21455== at 0xB1992: pclose (in /usr/lib/libSystem.B.dylib)
==21455== by 0x1F16: main (in ./a.out)
==21455==
==21455== Syscall param wait4(pid) contains uninitialised byte(s)
==21455== at 0x504FA: wait4 (in /usr/lib/libSystem.B.dylib)
==21455== by 0x1F16: main (in ./a.out)
o entanto, não recebo nenhum erro em um sistema Linux com o valgrind versão 3.5.
Alguma idéia sobre o que pode estar causando os erros no Ma
Atualiza
Ligando--track-origins
in valgrind mostra que a origem do problema pode estar nopopen()
ligar. A mesma coisa aconteceu com o gcc 4.2.1 e 4.5.
==4425== Conditional jump or move depends on uninitialised value(s)
==4425== at 0xB1992: pclose (in /usr/lib/libSystem.B.dylib)
==4425== by 0x1F18: main (in ./a.out)
==4425== Uninitialised value was created by a stack allocation
==4425== at 0xB14C5: popen$UNIX2003 (in /usr/lib/libSystem.B.dylib)
==4425==
==4425== Syscall param wait4(pid) contains uninitialised byte(s)
==4425== at 0x504FA: wait4 (in /usr/lib/libSystem.B.dylib)
==4425== by 0x1F18: main (in ./a.out)
==4425== Uninitialised value was created by a stack allocation
==4425== at 0xB14C5: popen$UNIX2003 (in /usr/lib/libSystem.B.dylib)