'Programming'에 해당되는 글 91건

  1. 2009.06.22 아아 또 실수~! 4
  2. 2009.06.22 주의력 부족 2
  3. 2009.05.25 이진트리를 만들고나서....아 망했어요... 2
  4. 2009.04.26 리눅스용 한글2008 체험판 크랙하기 26
  5. 2009.04.13 이래서 일괄변환을 하면 안된다 2

아아 또 실수~!

wchar_t* Game_Word_AnsRandom(UINT ch_cnt)
{
    wchar_t *ret;

    // string 이기때문에 NULL을 위해
    if((ret = (wchar_t*)calloc(ch_cnt + 1,sizeof(wchar_t))) == NULL)
        return NULL;

    srand(GetTickCount());
    
    while(ch_cnt >= 0){
        ret[ch_cnt] = (wchar_t)rand()%26 + 97;
        ch_cnt --;
    }

    MessageBox(NULL,ret,0,0);
    return ret;
}

아 또 실수 했어요 ...

이번엔 그래도 디버거가 제대로 작동했기때문에, 금방 알아냈답니다 ㅋㅋ..

게다가 상큼하게 세그멘테이션 폴트도 내 주는바람에 더 쉽게 찾을수 있었죠..

하지만 이런경우는 저도 처음이라서 첨엔 쪼금 당황했는 (한 3분 걸렸 ㅋㅋ)

확실히 이렇게는 안써보니깐 좀 미묘하군요 ㅋㅋ.

데이터 타입의 향연인가... 앞에 포스팅도 그렇게 이것도 그렇고 ㅋㅋ..

'Programming > C' 카테고리의 다른 글

간단한 디버그 함수  (0) 2010.08.16
오늘도 실수.. iconv  (0) 2010.06.24
주의력 부족  (2) 2009.06.22
이진트리를 만들고나서....아 망했어요...  (2) 2009.05.25
리눅스용 한글2008 체험판 크랙하기  (26) 2009.04.26

주의력 부족

아아. 전 역시

"여러개 있는거 중에서 다른거 찾기 같은거" 정말 못하는거 같습니다

특히 "물건찾기" 같은건 진짜 못합니다.

내가 어디두고 왔는지도 모르겠고, 찾지도 못하겠고...

몇일동안 애를 먹인게 있었습니다.

단어에다가 별표의 위치를 랜덤으로 찍는 그런 함수를 만들고 있었는데, 그렇게 하기 위해서는

랜덤한 숫자들을 가변배열에다가 저장할필요가 있어서 따로 메모리 할당을 받았더랍니다

그런데 이상하게 이게 프로그램이 돌다보면 갑자기 죽어버리는 현상이 생기는겁니다

위치도 딱 거기라고 찍을수가 없을정도로 가변적이였어요.

어쩃던 브레이크 포인터를 건 다음에 벅으를 잡으려고 삽질 ㅋ...

<ERROR>
    int *random_value,
        i,
        j,
        hidden_number_cnt    = -1,
        word_len            = -1;

    wchar_t *word_cp = (wchar_t*)0x0011;

    if((word_len = wcslen(word)) <= 0)
        return NULL;

    if((word_cp = wcsdup(word)) == NULL) // 쳐 죽는 위치 여기서 브레이크 포인터 증발 (합수종료)
        return NULL;                                   // 여기도 브포를 걸었지만 여기 안걸림, 즉 wcsdup에서 GG

    // 단어가 3이하일때 체크해줄것(무시한다던가) - 이함수 call한데서
    if(word_len < 4)
        hidden_number_cnt = 1;
        //return NULL;
    else if(word_len == 4 || word_len <= 5)
        hidden_number_cnt = 2;
    else if(word_len == 6 || word_len == 7)
        hidden_number_cnt = 3;
    else if(word_len >= 8 && word_len <= 10)
        hidden_number_cnt = 4;
    else if(word_len > 10)
        hidden_number_cnt = 5;  

    // windows에서는 가변배열 설정이 안되니 이렇게 하자
    if((random_value = (int*)calloc(hidden_number_cnt,sizeof(wchar_t))) == NULL)
        return NULL;

저기서 갑자기 주거 버리니깐 어어어 왜그런거얌. ㅜㅜ

이러고 위에 wcslen, wcsdup 함수 부분만 눈에 불을 켜고 찾아보았습니다

혹시해서 인자들 다 념어온거(리스트로 생성한) 틀렸나 확인을 해보았는데...... "다 맞 잖 아 !!!"

아 정말 저기서 저것만 미친듯이 보고보고보고보고 또 봐도 안되길래

미친듯이 여기 저기 주석을 쳐가면서 범위줄이기를 한결과

......
    for(i = 0;i < hidden_number_cnt ;i ++){
            //random_value[i] = rand() % word_len;   // 넌 꺼지고
            random_value[0] = rand() % word_len;     // 얘로 하니깐
......

아래 내용을 조금 바꾸니깐 잘되는겁니다!! (여기서 잘된다 == 안죽는다!)

그래서 오오오 여기가 "에 러 위 치 구 나 ㅋ" 했더니만...

또 아~무리 봐도 여기서 죽을 이유가 없어요 단지 i를 0으로 바꾼거 뿐이라니까?

hidden_number_cnt 변수가 이상한값 들어갔나 봐도 뭐 (당연히) 정상이고..

아놔 뭥미하다가 아까꺼 다시보니....

어?

<OK>
    // windows에서는 가변배열 설정이 안되니 이렇게 하자
    if((random_value = (int*)calloc(hidden_number_cnt,sizeof(int))) == NULL)
        return NULL;

우왕ㅋ wchar_t 라고 적어왔엉... int인데... int인데.. int인데...

저거 고치니깐 조난 잘돌아가네여 ㅜㅜ x 100

단 "한 단어" 차이인데 ㅜㅜ...

*오늘의 교훈*

1 디버거를 넘 믿지 말자.
- 특히 디버깅 위치에 너무 연연하지 말자 솔까말 저 디버깅 정보로 원래 문제가 된 부분을 절대 찾을수가 없엉ㅋ.

2 예측하지못한 에러(갑자기 사망!) 하는 경우는, 거의 100%에 가깝게,
잘못된 메모리 참조가 그 원인이다.

- 물론 (*) 참조 말고 전체적인 참조를 다 말하는거...(위에 경우에는 타입이 문제였죠)
그러고 보니 calloc에 강제로 타입케스팅을 해줬으니 컴파일러도 눈치 못챘겠네 ㅜㅜ

3 삽질엔 장사없다

교훈을 쓰자마자 동시에 난 자괴감에 빠짐.......

우어어어어엉? 저딴걸 내가 몇일씩 붙잡고 있었단 말이야?  이함수 60줄 정도 밖에 안

되는데 겨우 저걸로? 저걸로? 그럴리겅ㅄ엉ㄴ리ㅏㅁ나ㅣ루나ㅣㅇ라ㅣ

'Programming > C' 카테고리의 다른 글

오늘도 실수.. iconv  (0) 2010.06.24
아아 또 실수~!  (4) 2009.06.22
이진트리를 만들고나서....아 망했어요...  (2) 2009.05.25
리눅스용 한글2008 체험판 크랙하기  (26) 2009.04.26
이거 왜이래~!  (6) 2009.04.02

이진트리를 만들고나서....아 망했어요...

아 삽질...

어짜피 대부분 날짜순으로 게시판에 글이 올라오기때문에 해당 에피소드 순서도 거의 동일

(대부분의 에피소드가 업로드되는 순서는 ep1->ep2->ep3 (에피소드숫자를 기준으로 적으면 left 많으면 right 로한.. ))

구태여 이진트리로 작성할필요는 없었는데 ㅜㅜ

그러니깐 시간순이니 이진트리로 해봣자 거의 사향트리처럼 한곳으로 쭉. 나오는...(left left left ...........)

뭐야 결국엔 리스트랑 거의 똑같은 모습이 되어버렸잖아 ㅜㅜ.. 뭐야 원래 리스트로된거 트리로 바꿀려고 이짓을 했단말야.;

삽질이란 삽질은 엄청하고 이게뭐임

아 딱하나 얻은거 있다면 포인터 개삽질해가면서 다차원 포인터에대한 개념을 한번더 잡은정도??

(아직은 약간 개념이 흔들리는 상태이지만, 시간이 지나면 머리속에서 어느정도 정리가 되겠지? *,& 놀이 ㅜㅜ.. )

그러니까 실제목적에서 얻은 소득은 별로없고 삽질로인한 "학습효과" 가 있었다는 이런 기쁘고도 슬픈일이 ..

어쨌던.........

아놔 난 왜 이걸 처음에 만들 계획할때 생각못하고

왜 다 쳐만들고 노드위치 찍어보고 나서야 이게 병신짓이었단걸  생각해 낸걸까??

바보바보바바바뱌바바바보보보보보

내 4일(5일?)의 시간을 돌려줘~~~

안그래도 할꺼 마는데 이것저것 사람 우울하게 만드네.......

'Programming > C' 카테고리의 다른 글

아아 또 실수~!  (4) 2009.06.22
주의력 부족  (2) 2009.06.22
리눅스용 한글2008 체험판 크랙하기  (26) 2009.04.26
이거 왜이래~!  (6) 2009.04.02
플로피 디스크 이미지를 만들어서 mount하자!  (5) 2008.06.01

리눅스용 한글2008 체험판 크랙하기



결과..........(귀차나서 걍 전체화면 올림)
사용자 삽입 이미지

일단 그래도 연구용(??) 이고...

어짜피 한글 체험판은 기능이 제한적 이라...

기껏해야 날짜 제한 밖에 없어서(??) 공개해 놨긴한데...

그래도 문제된다고 하면 댓글 남겨주세요..

뒷부분을 더 보여달라는 댓글에 대해서는 더이상 따로 답글을 달아드리지 않겠습니다;;

죄송합니다;;

이래서 일괄변환을 하면 안된다

우왕 ㅋ

그냥 일괄적으로 %s/abc/def/g 하면(이거슨, 내가 아는 얼마 안되는 정규식)  저렇게 된다능...

바꾸기의 힘
사용자 삽입 이미지

나는 변수명을 비슷하게 하게 코딩을해서..(같은기능을 하는놈은 같은이름... 함수의 인자넣을떄고 그렇고)

아 좀더 자세히 말하자면
ex 1>
abc(&x);
void abc(int *x){*x=123;}

ex2>
typedef _Abc{
     int word_start;
}Abc;

typedef _Bcd{
     int word_start;
}Bcd;

ex2 처럼

구조체에 변수명도 저런식으로 좀 연관되게 지었나본데..

%s/start/now/g 이렇게 하니깐.

두 구조체 변수명 다 바껴버림

Abc만 바꿀라고 했는데 Bcd껏도 바꺼버림..

역시 vim애서나 vs에서나 바꾸기는 위험하다....!!

그렇다고 일일이 중간에 변수바끼면 찾아서 써줄수도 없구 아놔...

귀찮어염 ㅜㅜ 저거때문에 코딩스타일 바꾸는것도 조금은 생각해볼만....(아니 해야하나)

'Programming' 카테고리의 다른 글

gdb 화면 clear 하기  (2) 2010.05.30
조엘 온 소프트웨어...를 드디어 다 읽었다!  (8) 2010.04.29
비주얼 스튜디오 2008 에러  (3) 2009.04.09
복잡한 프로그래밍  (8) 2009.02.02
nasm include  (0) 2009.01.26
prev 1 ··· 3 4 5 6 7 8 9 ··· 19 next