问题从C ++中的函数返回数组值

时间:2014-06-04 13:57:52

标签: c++ arrays image

我在使用c ++从类中返回数组时遇到问题。我创建了一个虚拟图像,我想返回图像,以便我可以在另一个类中使用。但不知怎的,它没有按预期工作。

声明:

public:
    void Create_Marvin();                    //Create dummy marvin image
    double* Get_Data();                      //Get the dummy marvin image

private:
    int Color = 2;                           //Example color value
    int Width = 3;                           //Example width value
    int Height = 2;                          //Example height value
    double* Marvin_Image[2][2][3];           //Marvin image with [c][h][w] array orders
    double Marvin_Test_Data[12];

功能实施:

void Create_Dummy_Marvin_Image::Create_Marvin()
{
    int x = 0; //Random value initialisation
    for (int c = 0; c < Color; ++c)                  //Iterating through color values
    {
        for (int h = 0; h < Height; ++h)             //Iterating through height of the image
        {
            for (int w = 0; w < Width; ++w)          //Iterating through width of the image
            {
                x = ++x;                           //Incrementing the value of x
                Marvin_Image[c][h][w] = (double *)x; //Setting the value in the arrays to form marvin image with random values
                //cout << "Marvin image :" << int(Marvin_Image[c][h][w]) << "\n"; //Checking the values 
                Marvin_Test_Data[c*h*w] = Marvin_Image[c][h][w];
                cout << "\n Marvin image :" << int(Marvin_Test_Data[c*h*w]);

            }
        }
    }

}

//Get the dummy marvin image
double* Create_Dummy_Marvin_Image::Get_Data()
{
    //return Marvin_Image[Color][Height][Width]; //Returning the marvin image ;
    return Marvin_Test_Data;

}

当我从main函数打印数据时,Create_Marvin()正确打印数据。但是返回的值不会根据需要打印它。

主():

    double* Dummy_Single_Dim_Image[12]; //Single dimensional image with little more array data to avoid unprecidented results
Dummy_Image.Create_Marvin();
    Dummy_Single_Dim_Image[12] = Dummy_Image.Get_Data(); //Get the marvin image as three dimensional matrix with [c][h][w]

如果设置Dummy_Single_Dim_Image [12],上面的行是问题所在;然后控制台生成

 Final matlab output :2010112908
 Final matlab output :1993390502
 Final matlab output :0
 Final matlab output :6488492
 Final matlab output :6488064
 Final matlab output :6029344
 Final matlab output :1
 Final matlab output :6488400
 Final matlab output :19499094
 Final matlab output :-2
 Final matlab output :6488260
 Final matlab output :16777219

但是如果我将数组设置为Dummy_Single_Dim_Image [14];它产生类似

 Final matlab output :3
 Final matlab output :2
 Final matlab output :1
 Final matlab output :2
 Final matlab output :3
 Final matlab output :4
 Final matlab output :5
 Final matlab output :6
 Final matlab output :7
 Final matlab output :8
 Final matlab output :9
 Final matlab output :0

我的所需输出都不是,因为它应该只有1到12的值

进行了以下更改

double Marvin_Image[2][2][3];           //Marvin image with [c][h][w] array orders
double Marvin_Test_Data[12];

double* Create_Dummy_Marvin_Image::Get_Data()
{
    //return Marvin_Image[Color][Height][Width]; //Returning the marvin image ;
    return Marvin_Test_Data;

}

但是当我在主函数中打印它时,它再次产生一些奇怪的输出,如

    double* Dummy_Single_Dim_Image; //Single dimensional image with little more array data to avoid unprecidented results
Dummy_Image.Create_Marvin();
    Dummy_Single_Dim_Image  = Dummy_Image.Get_Data(); //Get the marvin image 
for (int c = 0; c < 2; ++c)                  //Iterating through color values
    {
        for (int h = 0; h < 2; ++h)             //Iterating through height of the image
        {
            for (int w = 0; w < 3; ++w)          //Iterating through width of the image
            {
                cout << "\n Final matlab output :" << int(Dummy_Single_Dim_Image[c*h*w]);
            }
        }
    }

我的输出:

 Final matlab output :10
 Final matlab output :10
 Final matlab output :10
 Final matlab output :10
 Final matlab output :10
 Final matlab output :10
 Final matlab output :10
 Final matlab output :10
 Final matlab output :10
 Final matlab output :10
 Final matlab output :11
 Final matlab output :12

这将从main函数中的数组中输出正确的顺序。我不明白为什么!!!

for (int i = -12; i < 0; ++i)
{
    cout << "\n Final matlab output :" << int(Dummy_Single_Dim_Image[i]);
}

1 个答案:

答案 0 :(得分:0)

首先关闭:

return Marvin_Test_Data[12];

正在返回一些不存在的东西。 Marvin_Test_Data是一个包含12个double *元素的数组。 C / C ++中的数组从0开始,所以最后一个元素是Marvin_Test_Data[11],但这不太可能是你想要的。您可能需要和double指向double的指针)的数组,并且您希望返回指向该double数组的开头的指针,更像是:

double Marvin_Test_Data[12];

double* Create_Dummy_Marvin_Image::Get_Data() {
    return Marvin_Test_Data;
}

返回指向数据的指针。