Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指针返回值_C++ - Fatal编程技术网

C++ 指针返回值

C++ 指针返回值,c++,C++,在这段代码中,我要求用户输入他的姓名、工作小时数和每小时工资,然后将两者相乘得到他的工资。我是通过一个指针函数来实现的,但是由于某种原因,当程序转到calculate_salary函数时,它以一个错误结束。什么是错误的,为什么会发生这种情况 #include <iostream> #include <string> using namespace std; class Employee { public: string name;

在这段代码中,我要求用户输入他的姓名、工作小时数和每小时工资,然后将两者相乘得到他的工资。我是通过一个指针函数来实现的,但是由于某种原因,当程序转到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
                 << "The salary is " << salary << endl
                 << "*********************" << 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;   
}
#包括
#包括
使用名称空间std;
班级员工
{
公众:
字符串名;
双薪;
双倍小时;
每小时双倍现金;
智力年龄;
雇员(){}
双倍*工资计算器(双倍*h,双倍*c\u p\h)
{
双*p;
*p=(*h)*(*c_p_h);

cout工资计算器中的指针
p
与任何分配的空间都不关联。因此,取消引用它会导致未定义的行为


不要在这里使用指针,只需将返回类型更改为
double
,并根据该类型调整程序。

正如我在注释中所述:函数返回指向变量
p
的指针。但是
p
超出范围(即,仅存在于函数本身中)因此,返回的指针指向某个东西,而我们不知道指向什么,也称为野生指针

为了避免这种情况,您应该只按值返回,因为这是一种基本类型。如果确实要返回指针,则必须分配内存。对于对象,可以使用函数new分配内存。例如:
double*p=new double;


请记住,当您不再需要此分配的内存时,您必须释放它,否则将导致内存泄漏。请阅读此处的详细信息:

我希望您尝试缩进代码。您会遇到什么错误?在使用“获取详细信息”功能后,程序将停止工作为什么在可以使用引用的情况下使用指针?该功能n salry_calculator返回指向双精度的指针。但是,变量p超出范围。此外,您使用了不必要的指针,如函数get_salary中的指针。我对另一个程序使用了相同的方法,并且成功了。可以通过此方法返回指针,但只有这一次我得到了一个错误指针值could指向您程序中的有效位置,但很可能不是。在您的其他程序中,您运气不错。@madridista“似乎工作”可能是未定义行为的症状