인프런 커뮤니티 질문&답변

밍링님의 프로필 이미지
밍링

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

4-C와 다양한 타입의 함수

4-C memset과 fill 관련 질문

작성

·

117

·

수정됨

0

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

안녕하세요! 강의 잘 듣고 있습니다 ㅎㅎ
다름이 아니라, 게리멘더링 문제에서 comp와 visited를 memset으로 초기화하고 제출했더니 버퍼오버플로우로 런타임에러가 나더라구요,, 0으로 초기화하는 경우에는 memset 쓸 수 있는 걸로 알고 있고, 심지어 0으로 초기화할 때는 memset이 fill보다 빠르지 않나요?ㅠㅠ 그런데 버퍼오버플로우 나는 이유가 궁금합니다!

답변 미리 감사드려요!!! 항상 이른 아침에 답변해주시던데 좋은 하루 보내세요~~

답변 2

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 밍링님 ㅎㅎ

comp와 visited를 memset으로 초기화하고 제출했더니 버퍼오버플로우로 런타임에러가 나더라구요

>> 함수 사용부분이 잘못 된 것 같습니다. 혹시 전체 코드 올려주시겠어요? ㅎㅎ 스샷으로 보내주시면 제가 디버깅을 못합니다 ㅠ

 

감사합니다.

밍링님의 프로필 이미지
밍링
질문자

헉 죄송합니다 ㅠㅠ 전체코드는 여기있습니다!! http://boj.kr/28fb0cd15f2e4e96b419a2b8409569e6

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 밍링님 ㅎㅎ

comp는 int[]이고 visited 는 bool[]이라는 차이점이 있는데요. ㅎㅎ

 

	for(int i=1; i<(1<<N)-1; i++){
		memset(comp, 0, sizeof(comp));
		memset(visited, 0, sizeof(visited));

이부분을 이렇게 고쳐보시겠어요?

 


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


밍링님의 프로필 이미지
밍링
질문자

아이고 오타였군요 ㅠㅠㅠ죄송합니다 감사해요 ㅎㅎ

0

안녕하세요, 인프런 AI 인턴입니다.

밍링님의 질문 관련하여, memsetfill 함수 사용 시 발생할 수 있는 버퍼 오버플로우 문제에 대해서 고민하고 계신 것 같습니다. memset 함수는 주로 배열의 모든 바이트를 특정 값으로 초기화할 때 사용되며, fill 함수는 STL 컨테이너의 요소를 특정 값으로 초기화할 때 사용됩니다. 두 함수 모두 초기화 작업에 널리 쓰이지만, 사용 방식과 적용 상황에 따라 주의해야 할 점이 있습니다.

먼저 memsetfill보다 빠르다는 점은 맞습니다. memset은 메모리를 바이트 단위로 직접 채우기 때문에, 매우 빠르게 동작하며 주로 0이나 -1과 같은 값으로 초기화할 때 사용됩니다. 이에 반해, fill 함수는 다소 느릴 수 있지만, 모든 데이터 타입에 사용할 수 있으며, 더 일반적인 상황에 적합합니다.

버퍼 오버플로우 문제는 memset을 사용할 때 주의해야 할 중요한 사항입니다. memset을 사용하면 지정된 값으로 메모리의 바이트를 채우는데, 이 과정에서 배열의 크기를 넘어서 메모리를 쓰려고 하면 버퍼 오버플로우가 발생합니다. 즉, memset의 세 번째 인자로 전달하는 크기 값이 실제 배열을 넘어서지 않도록 주의해야 합니다. 또한, memset은 바이트 단위로 데이터를 채우기 때문에, int와 같이 바이트 크기가 1바이트가 아닌 데이터 타입에 사용할 때 예상치 못한 결과가 발생할 수 있습니다.

다음은 관련된 질문과 유사한 맥락에서 제가 발견한 질문의 답변입니다:
- 알고리즘 교안 p.70 memset 관련 질문에서는 memset으로 초기화할 때 0과 -1만 가능하다고 설명되어 있으며, 다른 초기화 값이 필요한 경우 fill 함수의 사용을 권장하고 있습니다.

이 경우, fill 함수를 사용하시거나, 특정 값으로 초기화하고 싶으시면 해당 값에 맞는 방식을 선택하여 사용하시면 됩니다. 다만, 주어진 코드 조각과 직접적인 맥락에서 답변을 제공하는 것이 아니므로, 상황에 맞게 적절히 적용해보시길 권장 드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

밍링님의 프로필 이미지
밍링

작성한 질문수

질문하기