Student.h함수로 문자 포인터 전달 동적 메인 메모리
class Student
{
private:
char m_sHouse[64];
public:
Student(void);
~Student(void);
void getHouse(char *hName);
void setHouse(char *hName);
}
Student.cpp
void Student::setHouse(char *hName)
{
strcpy(m_sHouse, hName);
}
void Student::getHouse(char *hName)
{
if (m_sHouse != NULL)
{
hName = new char[strlen(m_sHouse)+1];
strcpy(hName, m_sHouse);
}
}
할당 :
student.getHouse(house);
if (strcmp(house, "house") == 0)
cout <<"\tCorrectly returned the student house: " << house<< endl;
setHouse(char *hName)
세트 student->m_sHouse
동일한 "집 ".
내 질문 : hName
설정
예상대로 내부는 역할을
, "집". 하지만 컨트롤이 함수 밖으로 전달되면 동적으로 할당 된 메모리가 할당 해제되므로 main에서 strcmp를 실행하면 프로그램이 중단되고 NULL 포인터를 비교하게됩니다.
1. 그것은 해제 아닙니다. 2.하지 마십시오. –
주어진 답변을 통해이 문제를 해결할 수 있지만이 작업을 수행해야하는 이유는 무엇입니까? C++에서'strcpy'를 사용하는 것은 대개 다른 스타일을 혼합하기 때문에 눈살을 찌푸리게됩니다. 'std : string's로 작업 해 보셨습니까? –
코드가 충돌하는 이유를 이해하는 것이 중요하지만, C++ 문자열로 전환하여 문제가 발생하지 않도록하는 것이 좋습니다. – jlunavtgrad