중간에 메모리 침범이 일어나는거 같은데 영 못찾겠습니다.

puaxx의 이미지

memset(buf_tmp,0x0,2048);
if(glovar.save_path[strlen(glovar.save_path)-1]!='/'){
  sprintf(buf_tmp,"%s/%s",glovar.save_path,glovar.index);
}else{
  sprintf(buf_tmp,"%s%s",glovar.save_path,glovar.index);
}
// buf_tmp에는 최고 128자 이하의 문자열이 들어감.

printf("%d[[%p : %p\n",__LINE__,glovar.stack_last,glovar.stack_last->next);

if((fp=fopen(buf_tmp,"a+"))==NULL){\
  printf("%s : [%d] : Error! %s\n",__FUNCTION__,0,"While open the file.");\
  exit(0);
}

printf("%d[[%p : %p\n",__LINE__,glovar.stack_last,glovar.stack_last->next);

두 glovar.stack_last->next 가 모두 NULL이 나와야 정상인데 마지막 glovar.stack_last->next 값이 갑자기 쓰레기값이 들어갑니다...마지막 lovar.stack_last->next 값이 계속 쓰레기 값이 들어가서 세그멘테이션 폴트가 자꾸나는군요..미치겠습니다.

fopen때문에 이럴수도 있는건지요?

girneter의 이미지

이것만 가지고는 아무리 고수라도 원론적인 답변 밖에
못 드릴거 같은데요.

주위 코드에서
배열 선언을 잘 보라든가
메모리 할당과 해제가 잘 되었는지 보라든가. 등등

코드를 단순화시켜서
fopen 만으로는 문제가 일어나지 않는걸 확인한후에
하나씩하나씩 원상복구해가면서
문제를 찾아보세요

개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?

익명 사용자의 이미지

제가 보기엔 초기화 문제같군요.

처음것은 쓰레기를 어떻게 우연히 출력가능했지만

다음것은 불가능한 경우

결국 초기화문제가 아니가 생각 되네요.

다시한번 살펴보세요.

빠른 문제해결이 있길 바라면서.......

puaxx의 이미지

여러번 확인해봤습니다.

fopen 이후에 glovar.stack_last->next의 값이 변조 되는군요..

왜 그런지는 모르겠습니다 --; 어리둥절..

혹시나 다른 동작 후에도 변하는지 한번 봐야 겠군요.

puaxx의 이미지

yangels wrote:
제가 보기엔 초기화 문제같군요.

처음것은 쓰레기를 어떻게 우연히 출력가능했지만

다음것은 불가능한 경우

결국 초기화문제가 아니가 생각 되네요.

다시한번 살펴보세요.

빠른 문제해결이 있길 바라면서.......

초기화라...OTL..답이 보이질 않습니다 >.<

cinsk의 이미지

efence, valgrind, mpatrol 등의 tool을 써 보기 바랍니다.

문제가 있는 지점을 빨리 찾을 수 있게 해 줍니다.

kuaaan의 이미지

sprintf, strcpy, strcat 등등의 함수는 경계체크를 하지 않습니다.
(즉, 버퍼오버플로우에 안전하지 않습니다.)
snprintf, strncpy strncat 등 'n'시리즈로 모두 바꾸어보세요. ^^
이게 근본적인 해결책이라고 생각되구요, 정 문제가 발생하는 부분을 찾고 싶으시면...

gdb의 watchpoint를 걸어서 메모리 침범이 발생하는 순간 break를 거세요. :D

----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------

puaxx의 이미지

kuaaan wrote:
sprintf, strcpy, strcat 등등의 함수는 경계체크를 하지 않습니다.
(즉, 버퍼오버플로우에 안전하지 않습니다.)
snprintf, strncpy strncat 등 'n'시리즈로 모두 바꾸어보세요. ^^
이게 근본적인 해결책이라고 생각되구요, 정 문제가 발생하는 부분을 찾고 싶으시면...

gdb의 watchpoint를 걸어서 메모리 침범이 발생하는 순간 break를 거세요. :D

gdb로 메모리 침범의 순간을 어떻게 잡아내는지 알려주시면 정말 감사하겠습니다.^^

puaxx의 이미지

cinsk wrote:
efence, valgrind, mpatrol 등의 tool을 써 보기 바랍니다.

문제가 있는 지점을 빨리 찾을 수 있게 해 줍니다.

valgrind 간단한 사용법이라도 알려주심 정말 ^^ 감사하겠습니다.

익명 사용자의 이미지

puaxx wrote:
memset(buf_tmp,0x0,2048);
if(glovar.save_path[strlen(glovar.save_path)-1]!='/'){
  sprintf(buf_tmp,"%s/%s",glovar.save_path,glovar.index);
}else{
  sprintf(buf_tmp,"%s%s",glovar.save_path,glovar.index);
}
// buf_tmp에는 최고 128자 이하의 문자열이 들어감.

printf("%d[[%p : %p\n",__LINE__,glovar.stack_last,glovar.stack_last->next);

if((fp=fopen(buf_tmp,"a+"))==NULL){\
  printf("%s : [%d] : Error! %s\n",__FUNCTION__,0,"While open the file.");\
  exit(0);
}

printf("%d[[%p : %p\n",__LINE__,glovar.stack_last,glovar.stack_last->next);

두 glovar.stack_last->next 가 모두 NULL이 나와야 정상인데 마지막 glovar.stack_last->next 값이 갑자기 쓰레기값이 들어갑니다...마지막 lovar.stack_last->next 값이 계속 쓰레기 값이 들어가서 세그멘테이션 폴트가 자꾸나는군요..미치겠습니다.

fopen때문에 이럴수도 있는건지요?


일단 buf_tmp가 정의되어 있는 부분 위아래 5줄(총 11줄입니다.),
glovar의 타입이 정의된 부분,
glovar이 정의된 부분
이 부분들을 올려주세요..
보기엔 구조체 정렬에 대한 문제가 메모리침범의 주 원인인듯 합니다.
puaxx의 이미지

glovar_st glovar={0};

glovar는 전연변수로 정의 되었습니다.혹시 몰라서 glovar값은 main함수 안에서 memset(&glovar,0x0,sizeof(glovar_st)); 로 다시 한번 초기화 합니다 --;;

char buf_tmp[2048]={0};

그리고 buf_tmp는 지역 변수입니다.
다시 말씀드리지만 buf_tmp에 들어가는 값이 끽해야 128byte를 넘지 못합니다.2048이라는 엄청난 사이즈를 잡아준것은 혹시나 하는 메모리 침범이 있을지 몰라서 입니다.(--;;이건 좀 오바였다는 생각도 듬)

익명 사용자의 이미지

다음과 같이
glovar.save_path
에는 값이 있는것 같은데
어떤 것에서 부터 얻나요?

대입 분이라든가 이전의 값은 어떤 것인지 궁금하네요.

spacelee의 이미지

리눅스이시라면
buf_tmp와 global_var를 모두
allocation 메모리로 잡아준다음에

export MALLOC_CHECK_=2를 하시고
다시 실행시켜보세요.

100% 보장은 못하지만,
다른 방법보다 좀 손쉽게 잡힐 수 잇는 것들은
잡아줍니다.

MALLOC_CHECK_에 관한 내용은
man malloc을 해보시면 됩니다.
(리눅스에서)

혹시 회사시라면 purify같은 상용툴을
사서 돌려보시면 즉빵입니다.

권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -

puaxx의 이미지

답변 감사 드립니다. 좋은 답변들이 너무 많이 올라왔군요..

문제는 아직 미결이고...이제 곧 퇴근시간이라 ^^...집에 가서나 한번 답변주신 것들을 토대로 훑어 봐야 겠습니다..

이런경우는 첨이라 좀 황당하군요 ^^

kuaaan의 이미지

puaxx wrote:

gdb로 메모리 침범의 순간을 어떻게 잡아내는지 알려주시면 정말 감사하겠습니다.^^

hostname 이라는 전역변수에 watchpoint를 거는 예입니다.

(gdb) watch hostname 
Hardware watchpoint 1: hostname
(gdb) r
... 중간생략 ...
Old value = 0x0
New value = 0x81f5048 "NAME OF FILE"
NAME_OF_FUNC (ini=0x81f5170, section=0x804cde0 "COMMON", key=0x804cde7 "hostname", returnValue=@0x804e7c8)
    at FILENAME.cpp:393
(gdb)

watchpoint는 주어진 변수의 주소를 모니터링하며,
해당 값이 변경되는 순간 브레이크를 걸어줍니다.
(특정 조건을 만족하는 순간 브레이크거는 등의 방법도 가능합니다.)

해당 변수(glovar??)에 watchpoint를 걸어보세요.
만약 메모리 침범이라면... 전혀 상관없는데서 브레이크가 걸리는 걸 확인하실 수 있을 겁니다.

128 byte 이상이 들어갈 일은 없다고 하셨죠?
그러면 glovar라는 char array의 129번째 element의 주소를 모니터링해보는 것도 재미있겠네요.

(gdb) p &변수명
하신 다음에 모니터링하고자 하는 주소를 추론해서 지정하세요.

(gdb) wat 0x806e1a0

----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------

lovewar의 이미지

memset(buf_tmp,0x0,2048); 

memset(buf_tmp, '\0', 2048); 

이런 문제는 아니겠죠.

익명 사용자의 이미지

아래의 내용을 자세히 보면요.

두 glovar.stack_last->next 가 모두 NULL이 나와야 정상인데 마지막 glovar.stack_last->next 값이 갑자기 쓰레기값이 들어갑니다...마지막 lovar.stack_last->next 값이 계속 쓰레기 값이 들어가서 세그멘테이션 폴트가 자꾸나는군요..미치겠습니다.

나중에 발생한 것에서 세그멘테이션 폴트가 난다는 것 그것의 문에서 에러가 난다고 생각 됩니다.
그럼 printf 에서 입력되는 값을 의심해 봐야 하는데요.

glovar.stack_last 를 이미 memset 으로 초기화 했으니
그럼 이전의 것 뭔지는 이곳에 없지만
그것에서 문제가 유발 된 것 아닐가요?

youlsa의 이미지

http://athleta.myscan.org/ee/moin.cgi/valgrind
여기 내용을 참조하세요.

=-=-=-=-=-=-=-=-=
http://youlsa.com

kuaaan의 이미지

yangels wrote:
아래의 내용을 자세히 보면요.

두 glovar.stack_last->next 가 모두 NULL이 나와야 정상인데 마지막 glovar.stack_last->next 값이 갑자기 쓰레기값이 들어갑니다...마지막 lovar.stack_last->next 값이 계속 쓰레기 값이 들어가서 세그멘테이션 폴트가 자꾸나는군요..미치겠습니다.

나중에 발생한 것에서 세그멘테이션 폴트가 난다는 것 그것의 문에서 에러가 난다고 생각 됩니다.
그럼 printf 에서 입력되는 값을 의심해 봐야 하는데요.

세그폴트가 나는건 잘못된 메모리에 '접근'하는 순간에 나는 거구요.

메모리에 잘못된 값이 들어가는건 그 이전에 발생했을 수 있습니다.

어제 쳐놓은 사고때문에 오늘 날벼락 맞는거랑 비슷하죠.

watch point로는 소득이 없었나보죠? :?

----------------------------------------------
한번뿐인 인생....
미친듯이 살아보자!
----------------------------------------------

익명 사용자의 이미지

yangels wrote:
아래의 내용을 자세히 보면요.

두 glovar.stack_last->next 가 모두 NULL이 나와야 정상인데 마지막 glovar.stack_last->next 값이 갑자기 쓰레기값이 들어갑니다...마지막 lovar.stack_last->next 값이 계속 쓰레기 값이 들어가서 세그멘테이션 폴트가 자꾸나는군요..미치겠습니다.

나중에 발생한 것에서 세그멘테이션 폴트가 난다는 것 그것의 문에서 에러가 난다고 생각 됩니다.
그럼 printf 에서 입력되는 값을 의심해 봐야 하는데요.

glovar.stack_last 를 이미 memset 으로 초기화 했으니
그럼 이전의 것 뭔지는 이곳에 없지만
그것에서 문제가 유발 된 것 아닐가요?

보시면 아시겠지만 glovar.stack_last->next를 fopen하기 전에 한번 fopen후에 한번 값을 검사했습니다.

printf문에 의해서 오버플로우가 발생해서 glovar.stack_last->next에 쓰레기 값이 들어갔다면 fopen하기 전에 찍어본 glovar.stack_last->next값에서 쓰레기 값이 찍혀 나와야 되는거 아닌가요? 하지만 쓰레기 값이 아닌 NULL이 나왔기에 printf문에서 문제가 발생한다고 보지 않았구요.

중요한건 fopen문을 제거했을시에는 문제없이 프로그램이 돌아간다는 것입니다 --;

여하는 무슨 문제였는지 모르겠지만 집에서 컴파일 해보니 집에서는 잘 돌아가더라는 --;; 헐.... 찝찝해 죽겠씁니다...

익명 사용자의 이미지

youlsa wrote:
http://athleta.myscan.org/ee/moin.cgi/valgrind
여기 내용을 참조하세요.

제가 테스트하는 시스템은 64비트인데 깔려 있는 valgrind는 32비트 용인지 실행이 안되네요.쩝...이런게 있다는것만 알아 두겠씁니다...다음에 써먹어야지..

cmoh1110의 이미지

globar_st 의 멤버로 stack_last 라는 놈이 있는 듯 한데,
stack_last 는 globvar.stack_last->next 처럼 쓰는 것으로 봐서
포인터 같은데...

1. stack_last 에 대한 메모리 할당은 하나요??

2. stack_last 에 대한 메모리 할당을 해도
memset(&glovar,0x0,sizeof(glovar_st));
때문에 stack_last가 NULL 포인터가 될 듯 한데, NULL 포인터에 대한
참조(stack_last->next)가 Seg. Fault의 원인일 것으로 사료됩니다만...

puaxx의 이미지

maenani wrote:
globar_st 의 멤버로 stack_last 라는 놈이 있는 듯 한데,
stack_last 는 globvar.stack_last->next 처럼 쓰는 것으로 봐서
포인터 같은데...

1. stack_last 에 대한 메모리 할당은 하나요??

2. stack_last 에 대한 메모리 할당을 해도
memset(&glovar,0x0,sizeof(glovar_st));
때문에 stack_last가 NULL 포인터가 될 듯 한데, NULL 포인터에 대한
참조(stack_last->next)가 Seg. Fault의 원인일 것으로 사료됩니다만...

에또...--;; 문제의 원인은 NULL에 의한것이 아니고 쓰레기 값에 의한 것이었습니다..

stack_last->next 에 0x40이나 0x20이 들어가더라구요..그래서 계속 세그폴트가...

그러나 왜 0x40이나 0x20같은 쓰레기 값이 난데 없이 들어가는지는 모르겠습니다 --;

익명 사용자의 이미지

1) 스택 오버플로우?
혹시 멀티쓰레드 프로그램인가요?
스택오버플로우일 가능성도 있습니다.
임시변통으로 내부변수의 크기를 줄여서 한번 돌려보세요.

Quote:
char buf_tmp[2048];

====>

char buf_tmp[512]; // 로컬 변수크기를 일단 최대로 줄일 수 있는 만큼 줄인다. 이외의 변수도 마찬가지.
// 아니면 char *buf_tmp; 로 선언하고 malloc()/free()를 사용하여 heap에 할당되도록 시도해본다.

2) sprintf()의 버퍼오버플로우?

Quote:
memset(buf_tmp,0x0,2048);
if(glovar.save_path[strlen(glovar.save_path)-1]!='/'){
sprintf(buf_tmp,"%s/%s",glovar.save_path,glovar.index);
}else{
sprintf(buf_tmp,"%s%s",glovar.save_path,glovar.index);
}
// buf_tmp에는 최고 128자 이하의 문자열이 들어감.

Quote:
memset(buf_tmp,0x0,2048);
if(glovar.save_path[strlen(glovar.save_path)-1]!='/'){
snprintf(buf_tmp, 2048,"%s/%s",glovar.save_path,glovar.index);
}else{
snprintf(buf_tmp, 2048,"%s%s",glovar.save_path,glovar.index);
}
// buf_tmp에는 최고 128자 이하의 문자열이 들어감.

* fopen() 유무에 따라, 문제가 발생한다면, 스택오버플로우 문제이거나(제가 보기에 유력하다는...), 오픈한 파일의 개수 문제일 수 있습니다.

lovewar의 이미지

maenani wrote:
globar_st 의 멤버로 stack_last 라는 놈이 있는 듯 한데,
stack_last 는 globvar.stack_last->next 처럼 쓰는 것으로 봐서
포인터 같은데...

1. stack_last 에 대한 메모리 할당은 하나요??

2. stack_last 에 대한 메모리 할당을 해도
memset(&glovar,0x0,sizeof(glovar_st));
때문에 stack_last가 NULL 포인터가 될 듯 한데, NULL 포인터에 대한
참조(stack_last->next)가 Seg. Fault의 원인일 것으로 사료됩니다만...

stack_last는 포인터 형일것이고 이를 메모리 할당을 했을것이라 판단됩니다. 그럼
그메모리가 힙에 생성되는지 아니면 stack에 생성되는지 알수 있나요?

다른 궁금사항은 힙에 생성된다면 그 힙에서 할당한 메모리간의 충돌이( fopen()함수로 발생한 메모리랑) 가능한가요?

궁금해지는 군요.

익명 사용자의 이미지

Anonymous wrote:
1) 스택 오버플로우?
혹시 멀티쓰레드 프로그램인가요?
스택오버플로우일 가능성도 있습니다.
임시변통으로 내부변수의 크기를 줄여서 한번 돌려보세요.

Quote:
char buf_tmp[2048];

====>

char buf_tmp[512]; // 로컬 변수크기를 일단 최대로 줄일 수 있는 만큼 줄인다. 이외의 변수도 마찬가지.
// 아니면 char *buf_tmp; 로 선언하고 malloc()/free()를 사용하여 heap에 할당되도록 시도해본다.

2) sprintf()의 버퍼오버플로우?

Quote:
memset(buf_tmp,0x0,2048);
if(glovar.save_path[strlen(glovar.save_path)-1]!='/'){
sprintf(buf_tmp,"%s/%s",glovar.save_path,glovar.index);
}else{
sprintf(buf_tmp,"%s%s",glovar.save_path,glovar.index);
}
// buf_tmp에는 최고 128자 이하의 문자열이 들어감.

Quote:
memset(buf_tmp,0x0,2048);
if(glovar.save_path[strlen(glovar.save_path)-1]!='/'){
snprintf(buf_tmp, 2048,"%s/%s",glovar.save_path,glovar.index);
}else{
snprintf(buf_tmp, 2048,"%s%s",glovar.save_path,glovar.index);
}
// buf_tmp에는 최고 128자 이하의 문자열이 들어감.

* fopen() 유무에 따라, 문제가 발생한다면, 스택오버플로우 문제이거나(제가 보기에 유력하다는...), 오픈한 파일의 개수 문제일 수 있습니다.

아..어쩌면 스택오버플로 일지도 모르겠네요...^^ 후아 좋은예감..

spacelee의 이미지

Anonymous wrote:
1) 스택 오버플로우?
혹시 멀티쓰레드 프로그램인가요?
스택오버플로우일 가능성도 있습니다.
임시변통으로 내부변수의 크기를 줄여서 한번 돌려보세요.

Quote:
char buf_tmp[2048];

====>

char buf_tmp[512]; // 로컬 변수크기를 일단 최대로 줄일 수 있는 만큼 줄인다. 이외의 변수도 마찬가지.
// 아니면 char *buf_tmp; 로 선언하고 malloc()/free()를 사용하여 heap에 할당되도록 시도해본다.

2) sprintf()의 버퍼오버플로우?

Quote:
memset(buf_tmp,0x0,2048);
if(glovar.save_path[strlen(glovar.save_path)-1]!='/'){
sprintf(buf_tmp,"%s/%s",glovar.save_path,glovar.index);
}else{
sprintf(buf_tmp,"%s%s",glovar.save_path,glovar.index);
}
// buf_tmp에는 최고 128자 이하의 문자열이 들어감.

Quote:
memset(buf_tmp,0x0,2048);
if(glovar.save_path[strlen(glovar.save_path)-1]!='/'){
snprintf(buf_tmp, 2048,"%s/%s",glovar.save_path,glovar.index);
}else{
snprintf(buf_tmp, 2048,"%s%s",glovar.save_path,glovar.index);
}
// buf_tmp에는 최고 128자 이하의 문자열이 들어감.

* fopen() 유무에 따라, 문제가 발생한다면, 스택오버플로우 문제이거나(제가 보기에 유력하다는...), 오픈한 파일의 개수 문제일 수 있습니다.

스택 오버플로우를 감이나 테스트가 아니라
시스템적으로 쉽게 찾는 방법이 있나요?

저두 쓰레드에서 스택 오버 플로우를 몇번 당해봤는데
테스트 통해서 추론하는 방식으로 밖에 못찾았었는데..

코어도 엉뚱하게 발생을 하니.
혹시 아시면 알려주세요~^^

그런데 이 글들이 명예의 전당 가는건 아닌지 모르겠네여. ㅋㅋ

권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -

익명 사용자의 이미지

2048이라는 사이즈를 512로 바꾸니 안정적으로 동작을 하네요...ㅜㅜ 아.. 내가 왜 진작 이생각을 못했을꼬...

답변 주신 모든분들께 진심으로 감사드립니다 :-)

익명 사용자의 이미지

spacelee wrote:

...
스택 오버플로우를 감이나 테스트가 아니라
시스템적으로 쉽게 찾는 방법이 있나요?
...

저는...보통....감으로 합니다.

* 시스템적인 것으로 판단하기에 run time 시 stack이 너무 변화무쌍한 것 같습니다.
* 멀티쓰레드 프로그래밍시 체크리스트에는 반드시 최대 쓰레드수, 쓰레드별 최대 메모리, 쓰레드별 스택등을 예측해 보고 실제 수행될 시스템 사양을 결정하기도 하며, 또한, 코딩에 보탬이 된다고 봅니다. 그냥 체크리스트 하나정도로 Tip으로 지니는게 좋을것 같다는.....

익명 사용자의 이미지

Anonymous wrote:
2048이라는 사이즈를 512로 바꾸니 안정적으로 동작을 하네요...ㅜㅜ 아.. 내가 왜 진작 이생각을 못했을꼬...

답변 주신 모든분들께 진심으로 감사드립니다 :-)

그래서, kldp가 좋은 것이지요. 무제약의 토론 및 대화,......

* snprintf()는 위험하니, 덜 위험한(적어도, snprintf정도라도...) 코딩으로 가시기를 기대합니다.

spacelee의 이미지

Anonymous wrote:
Anonymous wrote:
2048이라는 사이즈를 512로 바꾸니 안정적으로 동작을 하네요...ㅜㅜ 아.. 내가 왜 진작 이생각을 못했을꼬...

답변 주신 모든분들께 진심으로 감사드립니다 :-)

그래서, kldp가 좋은 것이지요. 무제약의 토론 및 대화,......

* snprintf()는 위험하니, 덜 위험한(적어도, snprintf정도라도...) 코딩으로 가시기를 기대합니다.

identity를 보여주시면
다음 토론때도 많은 도움이 될거 같은데..^^;;
손님 말구요. 아이디를 사용하시는건 어떠신지? ^^;;;

권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -

mach의 이미지

spacelee wrote:

...
identity를 보여주시면
다음 토론때도 많은 도움이 될거 같은데..^^;;
손님 말구요. 아이디를 사용하시는건 어떠신지? ^^;;;

부족하나마, 아이디가 필요하신 분도 있으신가 보군요. :shock:

귀차니즘은 나이와 더불어 :twisted: 늘어만 가고.......

최근 몇 달간(?) 단지 글이면 족하다! 라는 생각이었습니다.

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

Prentice의 이미지

http://packages.debian.org/unstable/devel/valgrind

AMD64용과 i386용이 있네요.

spacelee의 이미지

mach wrote:
spacelee wrote:

...
identity를 보여주시면
다음 토론때도 많은 도움이 될거 같은데..^^;;
손님 말구요. 아이디를 사용하시는건 어떠신지? ^^;;;

부족하나마, 아이디가 필요하신 분도 있으신가 보군요. :shock:

귀차니즘은 나이와 더불어 :twisted: 늘어만 가고.......

최근 몇 달간(?) 단지 글이면 족하다! 라는 생각이었습니다.

회사생활을 오래하다보니
다른 사람의 생각과 말과 글을 듣고 판단하려면
그 사람의 배경 지식과 경험들을 참고해서
종합적으로 판단하는게 많이 도움이 된다는걸 배웠습니다.
그런 뜻에서..

많이 배우겠습니다.^^;;

권위를 의심할 것,어긋남을 존경할 것,자리잡기를 거부할 것,항상 자신을 재창조할 것 - MIT 미디어랩 -

익명 사용자의 이미지

7년 전 글이었네요.
재미나게 읽고
문제 해결했습니다.. 허허허

저는 1024 * 10 사이즈를 256으로 줄여보았더니 정상적으로 작동하는군요..
Android Native라 정말 막막했었는데

스택 오버 플로우는 처음 경험한거라..
kldp 만세입니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.