newBuffer 가 copBuffer 보다 크기가 작다면..
운이 좋으면 그냥 잘 동작 하겠지만 그렇지 않다면 세그먼트폴트가 발생합니다..
운이 좋아서 그냥 잘 작동 하더라도 문제가 생길 수 있습니다. 가령 같은 프로세스 내에서 근접한 메모리가 할당 된 경우에 말이죠..
어쨌든 오류입니다. 방어적으로 그렇게 될만한 코드는 없애는게 후환이 없습니다. memcpy(newBuffer, copBuffer, (sizeof(newBuffer)>sizeof(copBuffer)?sizeof(copBuffer):sizeof(newBuffer)) );
이렇게만 되도 -.-;;
그런데 sizeof 로 하시는 걸 보니 데이터의 형이 궁금하네요.. 포인터라면 대부분 4만 리턴된텐데.. 스택인듯..?
실제는 소타님 말씀 처럼 버퍼를 넘겨서 기록이 되는 경우도 있지만 간단히 말하면 segment fault 가 난다고 생각하시면 됩니다.
위와 같은 실수는 컴파일때는 원래 발견 될 수가 없는거고 런타임때 나타나는데, 그렇다고 위와 같은 잘 못된 코드가 실행되면 무조건 나타는게 아니고 그때 그때 다르다 보니 나중에 디버깅에 애를 먹는 경우가 있죠.
그래서 저런걸 쉽게 잡을 수 있도록 하는게 efence 류의 디버깅 도구들입니다.
newBuffer에 copBuffer의 내용이 sizeof(copBuff
newBuffer에 copBuffer의 내용이 sizeof(copBuffer)만큼 복사가 되겠지요.
근데 어떠한 현상이라 질문을 하시는거 보니깐 제대로 답이 안나오시는가 본데...
show me the source
<어떠한 역경에도 굴하지 않는 '하양 지훈'>
#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);
컴파일 에러는 나타나지 않네요.....그리고 프로그램 돌리니까 메
컴파일 에러는 나타나지 않네요.....
그리고 프로그램 돌리니까 메모리만 계속 증가하게 되는군요...
memcpy 라는 놈이 그냥 카피를 하는데 다 카피를 하지 않게 되어서 메모리에 남기게 되는거 같습니다.
-+ 아자!! 행복하자 +-
[code:1]memcpy(newBuffer, copBuffer,
memcpy(newBuffer, copBuffer, sizeof(copBuffer));
newBuffer 가 copBuffer 보다 크기가 작다면..
운이 좋으면 그냥 잘 동작 하겠지만 그렇지 않다면 세그먼트폴트가 발생합니다..
운이 좋아서 그냥 잘 작동 하더라도 문제가 생길 수 있습니다. 가령 같은 프로세스 내에서 근접한 메모리가 할당 된 경우에 말이죠..
어쨌든 오류입니다. 방어적으로 그렇게 될만한 코드는 없애는게 후환이 없습니다.
memcpy(newBuffer, copBuffer, (sizeof(newBuffer)>sizeof(copBuffer)?sizeof(copBuffer):sizeof(newBuffer)) );
이렇게만 되도 -.-;;
그런데 sizeof 로 하시는 걸 보니 데이터의 형이 궁금하네요.. 포인터라면 대부분 4만 리턴된텐데.. 스택인듯..?
실제는 소타님 말씀 처럼 버퍼를 넘겨서 기록이 되는 경우도 있지만 간단히
실제는 소타님 말씀 처럼 버퍼를 넘겨서 기록이 되는 경우도 있지만 간단히 말하면 segment fault 가 난다고 생각하시면 됩니다.
위와 같은 실수는 컴파일때는 원래 발견 될 수가 없는거고 런타임때 나타나는데, 그렇다고 위와 같은 잘 못된 코드가 실행되면 무조건 나타는게 아니고 그때 그때 다르다 보니 나중에 디버깅에 애를 먹는 경우가 있죠.
그래서 저런걸 쉽게 잡을 수 있도록 하는게 efence 류의 디버깅 도구들입니다.
그리고 하나더메모리 증가는 memcpy 와는 관련이 없습니다.
그리고 하나더
메모리 증가는 memcpy 와는 관련이 없습니다.
memcpy 는 이미 존재하는 메모리 간에 복사를 하는 것이기 때문에 메모리를 새로 할당하지는 않습니다.
메모리 증가는 다른 소스코드에서 발생하는 문제일 것입니다.
[quote="소타"]그런데 sizeof 로 하시는 걸 보니 데이터의
배열일듯.
답변 감사드립니다.저도 예상치 못했던 코드라...난감했었는데요..
답변 감사드립니다.
저도 예상치 못했던 코드라...난감했었는데요....
고수님들 말씀데로 memcpy 에서는 메모리 증가를 시키지 않더군요....그래도 이놈때문에 다른 놈들이 에러를 발생시킬 요지가 다분하다는것은 맞는거 같습니다.
너무너무 감사드리고......좋은 시간 보내시기 바랍니다.
-+ 아자!! 행복하자 +-
댓글 달기