C ++返回的数组值不正确

时间:2017-06-12 06:16:16

标签: function pointers

首先,感谢您帮助我。我不是C ++的专家,但我在C中做了一些工作。我的代码问题是它不能正确显示返回的数组值。

一般来说,我的程序尝试做的是评估函数F(x),以表格格式显示它并找到它的最小值和最大值。我已经找到了做所有这些的方法,但是当我想显示数组F(x)的返回值时,它以某种方式被扭曲。第一个值总是正确的,例如像

cout << *(value+0) <<endl;

但是下一个值与假设的f(x)不同。如果我的代码达不到正确的标准,请事先提前结束,但我现在已经把头脑包裹了一段时间了。

My Full Code

#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
#include <string>
#include <stdlib.h>

using namespace std;
float *evaluate ();
void  display ();
void  Min_Max(float *);
int main()
{
float *p;


    evaluate();
    display();

cin.get();

p = evaluate();
Min_Max(p);


    return 0;
}

float *evaluate()
{
  ofstream Out_File("result.txt");
  int n=30;
  float x [n];
  float fx[n];
  float interval = ((4-(-2))/0.2);
  x[0]= -2.0;

    for(n=0;n <= interval;n++)
    {
        fx[n] = 4*exp((-x[n])/2)*sin((2*x[n]- 0.3)*3.14159/180);
        x[n+1] = x[n] + 0.2;

       if (Out_File.is_open())
        {
            Out_File <<setprecision(5)<<setw(8)<<showpoint<<fixed<< x[n];
            Out_File << "\t\t"<<setprecision(5)<<setw(8)<<showpoint<<fixed<<fx[n]<<endl;
        }
       else cout << "Unable to open file";
    }
    Out_File.close();
return fx;
}

void display()
{
      ifstream inFile;
    inFile.open("result.txt");
    string line;
    cout << "    x\t\t\t   f(x)"<<endl;
    cout << "_______________________________________"<<endl;
        while( getline (inFile,line))
        {
            cout<<line<<endl;
        }

    inFile.close();

}

void Min_Max(float *value)
{
    int a=0;
    for(a=0;a<=30;a++){
        cout << *(value+a) <<endl;
        *value =0;}
}

1 个答案:

答案 0 :(得分:1)

我知道,您已将p传递给您的函数Min_Max。其中p是指向数组入口点的指针。该数组在另一个函数local variable中创建为evaluate。这不起作用,因为只要evaluate完成,它的所有local variables(例如fx数组)都会被销毁,而你返回的指针则指向“无”。

在这种情况下,您可以使用heap内存(使用new运算符)来分配fx。但是不要忘记随后将其释放。

另外,请查看here