返回c ++后的随机数组值

时间:2014-06-06 11:13:14

标签: c++ arrays pointers initialization

我的问题是我不知道我放入数组的数据会发生什么,以及如何让它们保持在数组中。在调试时很明显,arr用零填充,而arr2用{1,2,3}初始化。但是函数会返回一些随机值..有人可以帮我指出它应该是什么样的吗?

#include <iostream>
#include <algorithm>
#include <vector>

class A
{
private:
    double arr[5];
public:
    A() 
    {
    std::fill( arr, arr + 5, 0.0 );
    };
    ~A() {};
    void setArr( double arrx[] ) 
    {
    for ( int i = 0; i < 5; i++ )
      arr[i] = arrx[i];
    }
    double* getArr(void) { return arr;}
};

int* probe()
{
    int arr2[3] = {1,2,3};
    return arr2;
}
int main()
{
    A ob1;
    double rr[5] = {1,2,3,4,5};
    ob1.setArr(rr);
    std::cout << ob1.getArr() << std::endl;
    std::cout << probe() << std::endl;
    system("Pause");
}

编辑: 现在谢谢你,我意识到我必须循环get **函数来获取所有值。但是,如果我的计划用法是将其写入下面的某个文件中,我该如何循环呢?

pF = fopen ("myfile.csv","a");
if (NULL != pF) 
{
   char outp[1000];
   sprintf_s(outp, 1000, "%6d,\n", ob1.getArr());
   fputs(outp, pF);
   fclose(pF);
}

2 个答案:

答案 0 :(得分:1)

std::cout << ob1.getArr() << std::endl;
std::cout << probe() << std::endl;

您实际上是在打印指针(地址),而不是doubleint的值。您需要循环遍历数组的所有元素以打印它们。

正如P0W所指出的,probe()的访问元素具有未定义的行为,在这种情况下,您必须确保该数组应该有效。一个快速的解决方案是在函数中声明数组静态。

您想在文件中写入值

pF = fopen ("myfile.csv","a");
if (NULL != pF) 
{
   char outp[1000];
   int i;
   int retsofar=0;

   for(i=0;i<5;++i)
       retsofar+=sprintf_s(outp+retsofar, 1000-retsofar, "%6d,\n", ob1.getArr()[i]);

   fputs(outp, pF);
   fclose(pF);
}

答案 1 :(得分:0)

  1. 您正在尝试打印ob1.getArr()probe()方法返回的数组的地址。每次你得到不同的地址。如果要打印数组,请使用循环。

  2. 在probe()中,您在堆栈上创建一个数组并简单地返回它的指针。这不安全。当它超出范围时,其值可能会被覆盖,您可能会得到不期望的行为。所以在堆上创建该数组。