realloc()의 오류 ... ?
글쓴이: 서지훈 / 작성시간: 금, 2005/04/15 - 2:23오후
음... 뭔가 이상하군요.
realloc()을 하면은 문자열이 오염이 되어 garbage 값이 들어가게 됩니다.
159 temp = (j_vector - ni_vector) + replace_len; 160 161 LOG_PRINT("ret_ = [%p][%d][%s]\n", ret_str, strlen(ret_str), ret_str); 162 163 if ((ret_str = (char *) realloc((char *) ret_str, temp)) == NULL) { 164 LOG_PRINT("malloc(): %s\n", strerror(errno)); 165 166 if (ret_str) 167 free(ret_str); 168 169 return NULL; 170 } 171 172 LOG_PRINT("ret_ = [%p][%d][%s]\n", ret_str, strlen(ret_str), ret_str); 173 174 strncat(ret_str, (pc_str + nj_vector), i_vector - nj_vector); 175 strcat(ret_str, pc_replace);
실행결과 ...
JPCRE replace test ... ## [jpcre.c:pcre_replace():161]: ret_ = [0x80581d0][8][abcdeaaa] ## [jpcre.c:pcre_replace():172]: ret_ = [0x80581d0][8][abcdeaaa] ## [jpcre.c:pcre_replace():161]: ret_ = [0x80581d0][16][abcdeaaafghijaaa] ## [jpcre.c:pcre_replace():172]: ret_ = [0x80581d0][16][abcdeaaafghijaaa] ## [jpcre.c:pcre_replace():161]: ret_ = [0x80581d0][28][abcdeaaafghijaaaklmn abcdaaa] ## [jpcre.c:pcre_replace():172]: ret_ = [0x80581d0][28][abcdeaaafghijaaaklmn!abcdaaa] [:] matched ...[abcdeaaafghijaaaklmn!abcdaaaefghijaaaklmn]
이게 일시적인게 아니라...
다른 컴에서도 같은 형상이 일어 나네요... ㅋㅋ
예전에도 socket()프로그래밍 하면서 socket descriptor가 마음되로 변하는 문제가 있었는데 ㅡㅡㅋ (이때또 처음 부터 다시 완전히 다 짰는데 ㅡㅡㅋ)
또 이런 황당한 일이 ?
역시 컴은 믿을게 못되는 군요.
인간이 문제인가 ???
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
Forums:
realloc은 free 한다음 malloc 하는것과 완전히 같기 때문에
realloc은 free 한다음 malloc 하는것과 완전히 같기 때문에 포인터 위치가 유지된다는 보장이 없을텐데요.
제가 하면서 실수를 했군요.저 temp값이 전체 사이트가 아니라...
제가 하면서 실수를 했군요.
저 temp값이 전체 사이트가 아니라...
추가될 사이즈라 잡은 메모리의 크기가 줄었다 늘었다 춤을 춘것이군요.
원래 realloc()시 크기를 키우는 경우는 별 문제는 없지만 줄일 경우에는 그 범위 밖의 값에 대해선 책임을 안지는게 당연한 것인데 ㅡㅡㅋ
함 ...
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
댓글 달기