작동 중지 에러
글쓴이: thsckdgus9 / 작성시간: 화, 2018/05/29 - 9:20오후
안녕하세요 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;
}
위 코드 실행시 작동 중지 에러가 나는데 어떤 메모리에 문제가 있는 걸까요?ㅠㅠ
Forums:
void input_str(String & tmp)
void input_str(String & tmp)
감사합니다
왜 오류가 낫던걸까요?ㅠㅠ
call by value와 call by
call by value와 call by reference의 차이입니다.
main 함수 내부의 ostr이 input_str 함수에 복사된 상태로 전달되어서, input_str 함수 내부에서 String 객체를 변경하여도, main 함수에 있는 ostr은 영향을 받지 않습니다.
ostr.show() 을 호출하는 시점에서, ostr.str은 NULL로 초기화가 된 포인터이므로, 잘못된 메모리 참조가 일어납니다.
댓글 달기