Heap corruption 어디서 왜 나는지 잘모르겠습니다..

조회수 395회

작성 코드

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {

    char* szBuffer = (char*)calloc(200,1);

    scanf_s("%s", szBuffer,_msize(szBuffer));

    int length = strlen(szBuffer);


    char* szNewBuffer = (char*)calloc(10,1);

    scanf_s("%s", szNewBuffer,_msize(szNewBuffer));
    int length2 = strlen(szNewBuffer);

    if (length + length2 >_msize(szBuffer)-1 ) {
        realloc(szBuffer, length + length2);

        if (szBuffer == NULL) {


            printf("할당실패");

        }

        else {
            printf("할당성공");
            memcpy(szBuffer + length,szNewBuffer,length2);
            puts(szBuffer);



        }
        free(szBuffer);
        free(szNewBuffer);
        return 0;

    }

    printf("%s\n", szBuffer);
    printf("%s\n", szNewBuffer);
    strcpy_s(szBuffer + length,_msize(szBuffer), szNewBuffer);
    printf("%s", szBuffer);

    free(szBuffer);
    free(szNewBuffer);


    return 0;
}
  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 밑에서 6번째 줄에 문제가 있습니다.

    strcpy_s(szBuffer + length, _msize(szBuffer), szNewBuffer);
    

    위의 코드를 아래와 같이 바꾸세요.

    strcpy_s(szBuffer + length, _msize(szBuffer) - length, szNewBuffer);
    

    애초에 szBuffer의 크기는 _msize(szBuffer)인데, 새 문자열을 기존 문자열의 뒷쪽에 붙이고 싶어서 szBuffer + length을 메모리 시작 지점으로 지정했으니 사용가능한 크기는 _msize(szBuffer) - length입니다.

    • 결과

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 버퍼의 크기가 아닌 사용가능 버퍼의 크기군요 너무 감사합니다 은혜를 입습니다 알 수 없는 사용자 2021.2.6 05:23

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)