큰 프로그램에서 작업 중이며 memcpy가 충돌을 일으켰습니다. 나는 작은 프로그램에서 상황을 복제했고 똑같은 일을한다. 나는 어떤 이유로이 프로그램은memcpy로 인해 프로그램이 초기화 된 대상과 충돌을 일으킬 수 있습니다.
// Runs fine
#include <iostream>
int main() {
char* s1 = "TEST"; // src
char* s2; // dest
memcpy(s2, s1, strlen(s1) + 1);
std::cout << s2 << std::endl; // Should print "TEST"
return 0;
}
잘 실행 것으로 나타났습니다하지만이 프로그램은 내가 이런 일이 왜 확실하지 않다
// Crashes
#include <iostream>
int main() {
char* s1 = "TEST"; // src
char* s2 = ""; // dest - Note the small change
memcpy(s2, s1, strlen(s1) + 1);
std::cout << s2 << std::endl; // Should print "TEST"
return 0;
}
충돌합니다. 누군가가 왜 충돌하는지 설명해 주시겠습니까?
감사합니다.
경우는 C로 코딩 ++ 원시'char *'포인터를 피해서'std :: string'과 C++ 스마트 포인터를 사용해야한다. –