blackshooter   2년 전

테스트케이스에서 NOEDGE 값을 0x58585858 로 했을때는 정답이 나오는데,,, 0x70000000으로 하면 오답이 나옵니다.. 오답은 길이없는 edge가 출력이 되는데,, 도대채 이거 왜이럴까요?

gallopsys   2년 전

원인은 memset 함수 때문입니다. cstring(string.h) / memory.h에 포함되어 있는 memset 함수의 원형은 다음과 같습니다.

void * memset ( void * ptr, int value, size_t num );


두 번째 인자(parameter)에 int값이 들어가지만 실제로 void *ptr의 값을 fill할 땐, unsigned char 형태로 fill이 이루어집니다.

비록 실제 채우려고 하는 메모리가 int[] 라고 하더라도 memset 함수는 1 byte 단위로 동작해서 다음과 같은 문제가 발생한다고 볼 수 있습니다.

다시 말해 NOEDGE가 0x70000000이면 0x00값만이 ptr에 fill되는 것이죠. 반대로 0x58585858이라고 하면 0x58이 채워지는 것입니다.


그러니 0x70000000으로 해결하고 싶으시면 C++의 algorithm 헤더에 있는 std:fill 함수를 응용해보시는 걸 추천드립니다.

blackshooter   2년 전

감사합니다. 정말 도움되었습니다.

eric00513   2년 전

Reminder:

이런 글은 반드시 질문 코너에 업로드 해 주세요. 답변 해드리고 싶은 분이 못 볼 수 있습니다.

댓글을 작성하려면 로그인해야 합니다.