c++ 기초플러스 오탈자 발견할떄마다 메모장에 적어두고 좀 모이면 계속해서 제보하고있는데,
저번에 제보한것중에 아무리 봐도 아닌거같은데 거기서 답변으로 맞다길래 여쭤봅니다 형님들
const free_throws &clone(free_throws& ft)
{
free_throws * pt;
*pt = ft;
return *pt;
}
내가 제보한 책의 오탈자 내용인데, 493 페이지에 해당하는 내용임
책이 있으신 형님들은 보시면 알겠지만 이 소스 앞에 설명으로
new를 사용하는 두번째 방법은 new를 사용하여 새로운 기억공간을 만드는 것이다. new로 문자열 저장할 공간을 만들고,
함수가 그 공간을 지시하는 포인터를 리턴하는 예제는 앞에서 많이 살펴보았다. 참조를 사용하여 이와 비슷한 일을 처리하는 방법은 다음과 같다.
라는 설명후에 위 소스가 나오는데..
내가 이해하고 있는거는 pt가 포인터니까 주소를 저장해야할것임..근데 pt는 어느 주소하나 저장하는 것없음
*pt =ft
*연산으로 바로 ft의 값을 pt가 가르키고있는 곳에 복사하려고만하는데 이게 분명 잘못된거지 않나요?
실제로
int main()
{
free_throws fit= {"YB",123,123,5.55};
free_throws fit2 = clone(fit);
return 0;
}
이런식으로 컴파일해보니 컴파일은 되는데 그 콘솔창에서바로 에러가나버림...분명 잘못된 코드는 맞는거같은데
내가 어딘가를 잘못이해하고 있다는거같은데..
코린이라 어디가 잘못된건지 모르겠는데 어디가 잘못된건가요?
오탈자 제보하면 근데 문상줌? - dc App
아녀 그냥합니다..다음 책사거나 정오표보는 사람도 올바른걸 보고 해야졍..
C++를 잘몰라서 댓글달기가 무서운데.. 님 말대로 free_throws * pt; 로만 되어잇음 포인터가 초기화되어 있지않아서 pt는 이상한거 가르키고 있을 가능성이 농후할것같슴다. vc++에선 pt 주소가 cccccccc 일텐데 여기다가 ft를 복사한다니 에러가 나겠죵.. 그래서 다음처럼 free_throws * pt = new free_throws();로 초기화를 해주는게 맞을 듯 싶슴니다. 모 틀리면 다른분이 태클 달아주시겟죵ㅎ
ㄴ 저도 동적할당으로든 주소값을 저장하든 메모리공간을 할당하거나 주소를 받아야한다고 생각하는데..제보할때 new free_throw()로 초기화 해주고 해야할것같다고 했는데 틀리다는 식으로 답변을 받았네요..