수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

pthread를 이용한 매트릭스 효과 프로그램이 자꾸 죽습니다

유키

2024.03.07

질문 제목 :pthread를 이용한 매트릭스 효과 프로그램이 자꾸 죽습니다

pthread를 이용한 프로그램에서 메모리 누수가 발생하는 듯한데,
디버깅을 어떤 식으로 해야하는지
아니면 해당 프로그램의 문제점은 무엇인지 알려주시면 감사하겠습니다.

질문 내용 :
아래는 매트릭스 효과...말하자면, 초록색 메세지들이 비처럼 주룩주룩 내리는 효과를 보여주는 프로그램입니다.pthread 와 ncurses 라이브러리를 사용하였습니다.리눅스에서 gcc로 컴파일해서 테스트 했는데원하는 동작은 정상적으로 수행하지만 일정시간, 짧게는 10분 길게는 몇 시간동안 돌려놓으면 혼자 죽습니다.http://codepad.org/cjb3fni3#include pthread.h#include ncurses.h#include stdio.h#include stdlib.h#include unistd.h#include sys/time.h#include string.h// 밀리세컨드 단위로 현재 시간을 반환int mygettimeofday() { struct timeval mytime; gettimeofday(&mytime, null); return (int) mytime.tv_usec;}// 비 내리는 듯한 효과로 문자열을 세로로 한 줄 출력// 함수 내부에서 스스로 스레드를 detach한다void *printcharline(void *arg) { pthread_detach(pthread_self()); char *str = whoknowwhat; // 이 문자열이 비처럼 주룩 주룩 내린다 srand( (int) mygettimeofday() ); int y = rand()%10 + 1; int x = rand()%40 + 1; int y_backup = y; int i; for( i = 0; i strlen(str); i++ ) { if( i 0 ) { attron(color_pair(1)); mvprintw(y-1, x, %c, str[i - 1]); attroff(color_pair(1)); } mvprintw(y++, x, %c, str[i]); refresh(); usleep(50000); } attron(color_pair(1)); mvprintw(y-1, x, %c, str[i - 1]); attroff(color_pair(1)); y = y_backup; sleep(2); for( i = 0; i strlen(str); i++ ) { mvprintw(y++, x, ); refresh(); usleep(50000); } pthread_exit((void *) 0);}int main() { pthread_t th; initscr(); start_color(); curs_set(0); init_pair(1, color_green, color_black); mvprintw(0, 0, matrix effect test); refresh(); while(1) { if( pthread_create(&th, null, printcharline, null) ) { perror(thread create error :); exit(0); } usleep(100000); } getch(); endwin(); return 0;}다음은 쉘 스크립트를 이용하여 프로세스의 상태를 모니터링한 결과입니다.whoknowwhat 6097 0.0 0.0 256424 1188 pts/1 sl+ 16:17 0:00 ./introwhoknowwhat 6097 0.0 0.0 256424 1188 pts/1 sl+ 16:17 0:00 ./introwhoknowwhat 6097 0.0 0.0 305612 1188 pts/1 sl+ 16:17 0:00 ./introwhoknowwhat 6097 0.0 0.0 305612 1188 pts/1 sl+ 16:17 0:00 ./introwhoknowwhat 6097 0.0 0.0 305612 1188 pts/1 sl+ 16:17 0:00 ./intro쉘스크립트를 이용하여 1초 간격으로 주기적으로 메모리 사용량을 계속 모니터링 하도록 하였는데계속 256424로 일정하다가죽고나서 로그를 보니죽기 한 30초~1분전쯤 사용하고 있는 메모리의 양이 위 처럼 증가합니다.제대로 detach가 되지 않아서 문제가 되나 싶어 detach를 주석처리 했더니,메모리 사용량이 초마다 미친 듯이 증가하는 것이 확인되었기에, detach에서 문제가 발생하는 것 같지는 않았습니다.뭣보다 일단 기본적으로 프로그램이 하는 동작에 비해 메모리 사용량이 지나치게 큰것을 봤을때문제가 분명 있긴 있는데 어디서 발생하는지 도저히 알 수가 없네요 ㅠㅠ이런 경우에 디버깅을 하려면 어떤 식으로 어디에 초점을 맞춰서 해야하는 지 조언이나문제점 자체에 대한 의견을 알려주시면 감사하겠습니다.

(사실 이미 지식in에도 올라가있는데, 좋은 답변 주시는 분께는 링크 알려드리고 채택해드릴게요)

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

번호 제 목 글쓴이 날짜
2694618 잘몰라서 설명부탁드립니다. scanf 관련 (3) 파라 2025-05-12
2694590 이 코드가 뭐하는 코드일까요? #2 빵순 2025-05-12
2694559 동적할당으로 배열(2차원열)을 만드는데 있어 그걸 함수화시키는데... (1) 늘솔길 2025-05-12
2694532 네트워크에 관하여... (4) 황소자리 2025-05-12
2694503 프로그램 연산 후 바로 종료되는 현상 (6) Judicious 2025-05-11
2694450 while문질문입니다. (1) 허리품 2025-05-11
2694420 C언어 질문할게요(유니코드,자료형,버퍼,캐스트연산자) 은새 2025-05-11
2694370 내일까진데 함수호출 제발 도와주세요!!!!!!!!!11 들찬 2025-05-10
2694339 putchar()의 괄호 안에 int c=10;로 전에 선언된 c를 넣으면 안되는 이유에서 제가 생각한 것이 그 이유가 되는지 확인하고 싶습니다. (3) 미르 2025-05-10
2694316 이 코드 어디가 잘못되었는지 고수분들 ㅠㅠ (2) 나빛 2025-05-10
2694285 언어 공부하는 과정 좀 추천해주세요! (1) 아빠몬 2025-05-09
2694258 카운터.. 질문입니다. (4) 하늘빛눈망울 2025-05-09
2694229 단순한 질문이요 (8) 여름 2025-05-09
2694202 용돈을 가지고 할 수 있는 일을 여러가지로 출력하는 방법 좀 알려주세요! (2) 미나 2025-05-09
2694145 화면깜빡임을 없애고 싶은데요... (1) 어서와 2025-05-08
2694069 unsigned 질문입니다. 힘차 2025-05-07
2694012 전공 비전공자 개발자 (10) 말글 2025-05-07
2693984 오버로딩이 무엇인가요? (2) 헛매질 2025-05-07
2693956 PlaySound재생이 안됩니다!(C에 음악넣기) 지존 2025-05-06
2693928 &와 *의 사용에 관한 명확한 이해 제나 2025-05-06
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com