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입니다.- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력