Возвращаемое значение по указателю

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;   
}
  • 4
    Я надеюсь, что вы попробуете отступить свой код.
  • 1
    Какую ошибку вы получаете?
Показать ещё 5 комментариев
Теги:

2 ответа

0
Лучший ответ

Как уже было сказано в моем комментарии: функция возвращает указатель на переменную p. Однако p выходит за рамки (т.е. Существует только в самой функции). Поэтому возвращаемый указатель указывает на что-то, и мы не знаем, что, также называемое диким указателем.

Чтобы этого избежать, вы должны просто вернуться по значению, поскольку это примитивный тип. Когда вы действительно хотите вернуть указатель, вам нужно выделить память. Для объекта вы можете выделить память с помощью функции new. Например: "double * p = new double;".

Имейте в виду, что вам нужно освободить выделенную память, когда вам это больше не понадобится, иначе у вас будет утечка памяти. Подробнее об этом читайте здесь: http://www.tutorialspoint.com/cplusplus/cpp_dynamic_memory.htm

1

Указатель p в salary_calculator не связан с каким-либо выделенным пространством. Поэтому разыменование его приводит к неопределенному поведению.

Вместо использования указателей здесь просто измените тип возврата, чтобы double и настроить свою программу в соответствии с этим.

  • 0
    Я использовал тот же метод для другой программы, и это сработало. Через этот метод можно вернуть указатель, но только в этот раз я получаю ошибку
  • 0
    Значение указателя может указывать на правильное местоположение в вашей программе, но, скорее всего, это не так. В другой вашей программе вам повезло.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню