작동 중지 에러

thsckdgus9의 이미지

안녕하세요 c++초보입니다. 질문하나 드립니다!

#include
#include
#pragma warning(disable: 4996)
using namespace std;

class String {
int len;
public:
char *str;
void set(char *p);
void show();
};

void String::set(char *p) {
len = strlen(p);
str = new char[len + 1];
strcpy(str, p);
}

void String::show()
{
cout << "str:" << str << ",length:" << len << endl;
}

void input_str(String tmp) {
char s[80];

cout << "Input string=> ";
cin >> s;
tmp.set(s);
}

int main()
{
String ostr;
ostr.str = NULL;

input_str(ostr);

ostr.show();
return 0;
}

위 코드 실행시 작동 중지 에러가 나는데 어떤 메모리에 문제가 있는 걸까요?ㅠㅠ

peecky의 이미지

void input_str(String & tmp)

thsckdgus9의 이미지

왜 오류가 낫던걸까요?ㅠㅠ

peecky의 이미지

call by value와 call by reference의 차이입니다.

main 함수 내부의 ostr이 input_str 함수에 복사된 상태로 전달되어서, input_str 함수 내부에서 String 객체를 변경하여도, main 함수에 있는 ostr은 영향을 받지 않습니다.

ostr.show() 을 호출하는 시점에서, ostr.str은 NULL로 초기화가 된 포인터이므로, 잘못된 메모리 참조가 일어납니다.