2015-01-03 3 views
0

이 코드에서는 사용자에게 이름, 근무 시간 및 시간당 요율을 물어 본 다음 두 가지를 곱해서 월급을 얻습니다. 포인터 함수를 통해이 일을하고 있지만 어떤 이유로 프로그램이 calculate_salary 함수로 이동하면 오류로 끝납니다. 무엇이 잘못되었으며 왜 이런 일이 일어나고 있습니까?클래스의 포인터 함수가 작동하지 않습니다.

#include <iostream> 
#include <string> 

using namespace std; 
class Employee 
{ 
public: 
string name; 
double salary; 
double hours; 
double cash_per_hour; 

int age; 
Employee(){} 
double* salary_calculator(double *h, double *c_p_h) 
{ 
double *p; 
*p = (*h) * (*c_p_h); 
cout<<"here"<<endl; 
return(p); 
} 
void display() 
{ 
cout<<endl<<endl<<"*********************"<<endl; 
cout<<"The salary is "<<salary<<endl; 
cout<<"*********************"<<endl; 
} 
void get_salary() 
{ 
double *s; 

s = salary_calculator(&hours, &cash_per_hour); 

    salary = *s; 

} 
void get_details() 
{ 
cout<<"********************************"<<endl; 
cout<<"WELCOME TO THE SALARY CALCULATOR"<<endl; 
cout<<"Please enter your name "<<endl; 
cin>>name; 
cout<<"Please enter the number of hours worked"<<endl; 
cin>>hours; 
cout<<"Please enter the rate per hour"<<endl; 
cin>>cash_per_hour; 
cout<<"***************END****************"<<endl; 
} 
}; 
int main() 
{ 
Employee one; 
one.get_details(); 
one.get_salary(); 
one.display(); 
return 0; 
} 
+3

코드를 들여 쓰기 바랍니다. – hetepeperfan

+1

어떤 오류가 있습니까? – simeg

+0

get_details 함수 후 프로그램 작동이 멈 춥니 다 – madridista

답변

0

내 의견에 이미 언급했듯이이 함수는 변수 p에 대한 포인터를 반환합니다. 그러나 p는 범위를 벗어납니다 (즉, 함수 자체에만 존재 함). 따라서 리턴 된 포인터는 어떤 것을 가리키며 우리는 무엇을 알지 못합니다. 또한 와일드 포인터라고도합니다.

이 문제를 방지하려면 원시 유형이므로 값으로 반환해야합니다. 포인터를 반환하려면 메모리를 할당해야합니다. 객체의 경우 new 함수를 사용하여 메모리를 할당 할 수 있습니다. 예 : "double * p = new double;"

더 이상 필요가 없으면 할당 된 메모리를 비워야한다는 점에 유의하십시오. 그렇지 않으면 메모리 누수가 발생합니다. 이에 대한 자세한 내용은 여기를 참조하십시오. http://www.tutorialspoint.com/cplusplus/cpp_dynamic_memory.htm

1

포인터 salary_calculator에서 p은 임의의 할당 된 공간과 연결되어 있지 않습니다. 따라서이를 참조 해제하면 정의되지 않은 동작이 발생합니다.

여기서 포인터를 사용하는 대신 반환 유형을 double으로 변경하고 이에 따라 프로그램을 조정하십시오.

+0

다른 프로그램에서 같은 방법을 사용했는데 효과가있었습니다. 이 메서드를 통해 포인터를 반환 할 수는 있지만 오류가 발생하는 것은 이번에 만 – madridista

+0

포인터 값이 프로그램 내의 유효한 위치를 가리킬 수 있지만 확률은 그렇지 않습니다. 다른 프로그램에서 운이 좋았습니다. – Downvoter

관련 문제