2014-10-24 3 views
0

에 의해 감지 스매싱 메인의 몸 stack smashing하지만 메모리 누수를 찾을 수 없습니다. Valgrind의 보고서 : == 9813 종료 ./a.out 감사 : 3 * 스택 * 감지 스매싱 :스택 스택 스매싱이 다 내 주요 기능 ++ 코드 ... 여기 에서 감지 Valgrind의

1.New 계정 2. 거래 3. 종료

은 선택 입력 ==

== 9813 == HEAP 개요 :

== 출구에서 사용중인 9813 == 0 블록

바이트

== 9813 0 == 총 힙 사용 : 10 allocs, 10 개 해방, 954 바이트 == 9813

==

== 모든 힙 블록이 해제 된 9813 == 할당 - 누출은 불가능합니다 -v

== 9813 == ERROR 요약 : 0 상황에서 0 오류 (9813 억제 == 감지 억제 에러 카운트 용 ==

== 9813 == 재실행으로

: 0에서 0) 중단됨 (코어 덤프 됨)

어디로 가고 있습니까?

+1

"스택 스매싱"에 대한 설명 http://stackoverflow.com/questions/1345670/stack-smashing-detected –

+4

뭔가 'char's가'time' 결과를 저장하기에 충분하지 않습니다. – user657267

+0

@ user657267와 동의 "Fri Oct 24 10:42:10 2014"확실히 더 큰 목적지 버퍼 char dot [15]; –

답변

1

스택 스 메싱을 야기하는 라인은 strcpy(dot,ctime(&rawtime));입니다.
함수 ctime은 길이가 15 바이트 이상인 "Wed Jun 30 21:49:08 1993\n"과 같은 문자열을 반환하며 ctime의 결과를 저장하는 데 더 많은 바이트가 필요합니다.
strcpy은 대상 메모리의 여백을 확인하지 않으므로 위험한 것으로 간주됩니다. 대신 strncpy을 제안합니다. 또한 프로그램에서 둘 이상의 스레드를 실행하는 경우 ctime_r이 좋습니다.