다음 코드는 lpSubKey를 해제하려고 시도 할 때 힙 손상을 발생시킵니다.주어진 코드가 힙 손상 오류를 발생시키는 이유는 무엇입니까?
정확히 무엇이 잘못 되었나요?
#define DRIVER_NAME L"TEST"
#define SUB_KEY L"System\\CurrentControlSet\\Services\\"
size_t len = (wcslen(SUB_KEY) + wcslen(DRIVER_NAME) + 1) * sizeof(WCHAR);
LPWSTR lpSubKey = calloc(1, len);
wcscat_s(lpSubKey, len, SUB_KEY);
wcscat_s(lpSubKey, len, DRIVER_NAME);
free(lpSubKey);
편집 :이 오류가 main()의 유일한 코드 일 때도 오류가 발생하므로 오류가 다른 곳에서 발생하지 않습니다.
EDIT2 : 허용 된 답변을 반영하도록 코드를 업데이트하면 문제가 해결되었습니다. 나는 아직도 왜 처음에는 오류가 있는지 보지 못합니다. len이 올바른 값이 아니기 때문에 wcscat_s가 보호를 제공하지 않더라도 내 버퍼는 두 문자열을 모두 수용 할 수있을 정도로 커야합니다.
#define DRIVER_NAME L"TEST"
#define SUB_KEY L"System\\CurrentControlSet\\Services\\"
size_t len = wcslen(SUB_KEY) + wcslen(DRIVER_NAME) + 1;
LPWSTR lpSubKey = calloc(len, sizeof(WCHAR));
wcscat_s(lpSubKey, len, SUB_KEY);
wcscat_s(lpSubKey, len, DRIVER_NAME);
free(lpSubKey);