newtype
::: newtype의 지식창고 :::
newtype
전체 방문자
오늘
어제
  • 분류 전체보기 (392)
    • Dev (214)
      • C, C++ (43)
      • Go (5)
      • Web (49)
      • DBMS (21)
      • DevOps (8)
      • Java (2)
      • Windows, Win32 (4)
      • Visual Basic (5)
      • C# (2)
      • Mobile (25)
      • SQL CE (7)
      • Google Map (6)
      • Python (2)
      • cygwin (2)
      • 기타 (32)
      • Ruby (1)
    • 명언 (10)
    • 모임 (18)
      • 붕주회 (3)
      • 신흥컴정 (14)
      • 웹20기 (1)
    • 사진 (8)
    • 불펌 (29)
    • 막글 (98)
    • 게임 (6)
    • 여행 (8)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 관리

공지사항

  • whoami
05-19 07:59
hELLO · Designed By 정상우.
newtype

::: newtype의 지식창고 :::

Dev/C, C++

core 파일이 생성되는 한가지 상황

2011. 10. 31. 20:41
오늘 하루종일 삽질한 내용이 있어서 기록을 남긴다.

[ 상황 ]
패킷 내용이 추가되어서 기존 모듈을 수정하게 되었다.
컴파일을 잘되는데, 실행하면 계속 core 파일이 생성되면서 프로세스가 죽는다.
수정 한 부분을 전체 주석으로 막아도, Call Stack을 체크 해보면 특정 함수를 진입하는 시점에 죽어 버린다.

[ 원인 ]
원인은 패킷 사이즈가 커지면서, Stack 영역에 할당 할 수 있는 최대 메모리 사이즈를 초과한 것이다.

[ 해결 방안 ]
Stack 영역이 아닌, Heap영역에 메모리를 할당 하면 된다.

원인 밝히느라 오전 내내 삽질, 
정적 메모리 구조를 동적 구조로 바꾸느라고, 오후 내내 디버깅 및 삽질..
오늘 하루도 이렇게 날려 먹었다.

[ Code ]
-. Stack 영역에 할당 할 수 있는 최대 크기 확인 ( 단위 KB )

$ ulimit -s
 8192



-. 테스트 프로그램.

// cc -o maxsize maxsize.c
#include <stdio.h>

typedef char PACKET[5600000];

int main()
{
        PACKET pkt;
        //PACKET pkt2;  
        PACKET *pkt3;

        printf ("\n");
        printf ( "%s: %d\n", "PACKET", sizeof(PACKET) );

        memset ( &pkt, 0, sizeof(pkt) );
        //memset ( &pkt2, 0, sizeof(pkt2) );   // rise core dump  

        pkt3 = (PACKET*)malloc(sizeof(PACKET));
        if ( !pkt3 ) printf("not enough momery\n");
        else memset( pkt3, 0, sizeof(PACKET) );

        return 0;
}

실행 해 보면,  아래와 같은 결과를 얻는다.

$ maxsize
PACKET: 5600000



 하지만, 9, 16 라인의 주석을 풀고 실행해보면, 아래와 같이 core 파일이 생성된다.

$ maxsize
세그멘테이션 결함(Segmentation Fault)(코어 덤프)


[ 참고문서 ]
http://www.joinc.co.kr/modules/moniwiki/wiki.php/article/stack_size 


 
반응형

'Dev > C, C++' 카테고리의 다른 글

debian 계열 linux에서 core 파일 생성 방법  (0) 2015.07.30
Serial-port 관련 자료 정리  (0) 2014.08.29
Pro*C/C++ Precompiler Programmer's Guide  (0) 2009.03.13
한글이 포함된 문자열을 특정 byte로 자르기  (0) 2009.02.16
DisplayHex  (0) 2008.11.13
    'Dev/C, C++' 카테고리의 다른 글
    • debian 계열 linux에서 core 파일 생성 방법
    • Serial-port 관련 자료 정리
    • Pro*C/C++ Precompiler Programmer's Guide
    • 한글이 포함된 문자열을 특정 byte로 자르기
    newtype
    newtype
    지극히 개인적인 지식의 창고

    티스토리툴바