c언어 질문입니다.
글쓴이: bass1ife / 작성시간: 화, 2005/02/15 - 12:52오전
함수가 있습니다.
int set_query(char* target, char* path, char* host) { char tmp[URL_LEN]; // char * tmp = (char *)malloc(URL_LEN); int tmp_len, path_len; int i; memset(tmp, 0, URL_LEN); printf("path: %s\n", path); exit(1); ...(하부 생략합니다)
tmp를 선언할 때 정적으로 선언하면 인자로 받은 path의 값이 제대로 나오는데
malloc으로 메모리를 할당하면 path 안에 아무것도 없군요...
어디서 문제가 생긴걸까요?
Forums:
위의 코드 안에는 path를 tmp로 복사하는 과정이 안 들어가 있는데
위의 코드 안에는 path를 tmp로 복사하는 과정이 안 들어가 있는데 일부러 생략하신 건가요?
-----
http://monpetit.posterous.com/
http://monpetit.tistory.com/
나중에 tmp에 다른 값이 들어가기는 하지만 path안의 값을 바로
나중에 tmp에 다른 값이 들어가기는 하지만
path안의 값을 바로 tmp에 집어넣지는 않습니다.
두 배열 사이에 직접적인 연관 관계는 없지요...
그래서 더 황당합니다..:cry:
젠투, 젠투, 그리고 젠투.
다른 부분에서 이미 꼬인 것 아닌지요?memory bound 검사
다른 부분에서 이미 꼬인 것 아닌지요?
memory bound 검사 기능이 있는 malloc 라이브러리를 사용해보세요.
일단 올리신 부분에는 아무런 문제가 없습니다.매크로인 URL_LE
일단 올리신 부분에는 아무런 문제가 없습니다.
매크로인 URL_LEN이 어떻게 정의되었는지 살펴보시고, 만약 정상이라면 다른 부분에서 생긴 문제입니다.
tmp에 저장되는 내용의 길이가 URL_LEN보다 길어서 다른 변수의 공간을 침범하는 경우도 생각해 볼 수 있겠군요. 그렇다면 배열은 스택에 저장되고 malloc로 할당받은 공간은 힙에 저장되니까 배열로 하면 잘 되는 이유도 설명이 되고...
[quote="bass1ife"]나중에 tmp에 다른 값이 들어가기는 하
그렇다면, path는 memset으로 0으로 채워졌으므로, 그 안에 아무것도 없는 것이 당연합니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
[quote="cdpark"]다른 부분에서 이미 꼬인 것 아닌지요?
음...그게 제일 속 편할 것 같습니다..디버깅을 할려고 해도 어디서부터 손을 대야 할지 난감하네요.
무슨 말씀이신지....
젠투, 젠투, 그리고 젠투.
Ooops. 질문을 잘 못 이해했군요. :oops: 흠.. UR
Ooops. 질문을 잘 못 이해했군요. :oops:
흠.. URL_LEN의 크기가 얼마나 되는지요.
stack overflow가 의심이 갑니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
비슷한 경험이 있습니다.제경우엔 위에서 먆이들 언급한
비슷한 경험이 있습니다.
제경우엔 위에서 먆이들 언급한 memory boundary 에 관한 문제 였습니다..
=================================
:: how about a cup of tea ? ::
=================================
댓글 달기