2017-04-10 20 views
0

ptsname()으로 전화하면 char*이 나옵니다.ptsname()의 결과를 비워야합니까?

맨 페이지가 링크, 소유권 또는 수명을 지정하지 않았지만 valgrind가 누출을 일으키는 것으로 표시하고 있습니다 (--leak-check=full). 나는 보통 명사에 붙여서의 뜻을 나타냄 malloc 얻을 결과를 -ing free()에 따라

그러나
==46958== 128 bytes in 1 blocks are definitely lost in loss record 41 of 65 
==46958== at 0x10010FEBB: malloc (in /usr/local/Cellar/valgrind/3.11.0/lib/valgrind/vgpreload_memcheck-amd64-darwin.so) 
==46958== by 0x1003F9682: ptsname (in /usr/lib/system/libsystem_c.dylib) 
==46958== by 0x10001BA5F: startJob(childproc*) (unix-base.cc:211) 
==46958== by 0x100019CAB: stepChild(childproc*, std::__1::function<bin::Job* (bin::Job*)>) (unix-base.cc:281) 
==46958== by 0x100018F2C: bin::runJobs(std::__1::function<bin::Job* (bin::Job*)>, int) (unix-base.cc:350) 
==46958== by 0x1000027FC: pmain() (bin.cc:65) 
==46958== by 0x100003787: main (bin.cc:90) 

는 '오류 D :

bin(46690,0x7fff76531000) malloc: *** error for object 0x7fb35af00f90: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 
./bootstrap.sh: line 41: 46690 Abort trap: 6   bin/bin 

이 플랫폼에서 ptsname()의 내부 구현이 단지 누설인가, 또는해야 나는 (어떻게 든) 결과를 자유롭게 할 수 있습니까?

+1

'ptsnmame'은 정적 저장소를 반환하므로 reentrent 버전'ptsname_r'을 사용해보십시오. – fluter

답변

1

라이브러리가 해당 메모리를 할당하고 설명서에 라이브러리가 해당 메모리를 다시 사용할 수 있다고 나와 있으므로 이 아니고은 무료입니다.

On success, ptsname() returns a pointer to a string in static storage which will be overwritten by subsequent calls. This pointer must not be freed. On failure, a NULL pointer is returned.
The man page

이 valgrind 경고는 무시해야합니다. 당신은 valgrind가 당신을 위해 그것을 무시하도록 말할 수 있습니다.

--ignore-fn=<name>
Any direct heap allocation (i.e. a call to malloc , new , etc, or a call to a function named by an --alloc-fn option) that occurs in a function specified by this option will be ignored. This is mostly useful for testing purposes. This option can be specified multiple times on the command line, to name multiple functions.
The man page