C++ C++;:二维数组:一维固定?

C++ C++;:二维数组:一维固定?,c++,memory-management,heap,multidimensional-array,C++,Memory Management,Heap,Multidimensional Array,我需要将一个double[][6]传递给一个方法。但我不知道如何创建二维数组 6是一个固定的大小(或者是一个“文字常量”,如果我的术语正确的话),该方法可以接受。我尝试过这样的事情,但没有成功 double *data[6] = new double[6][myVariableSize]; 因此,该方法实际上看起来像: int myMethod(double obj_data[][6]); 提前感谢您的方法定义应如下所示(以匹配您的定义): 但是这不是有效的C++,因为只有第一个维度是不可定

我需要将一个
double[][6]
传递给一个方法。但我不知道如何创建二维数组

6
是一个固定的大小(或者是一个“文字常量”,如果我的术语正确的话),该方法可以接受。我尝试过这样的事情,但没有成功

double *data[6] = new double[6][myVariableSize];
因此,该方法实际上看起来像:

int myMethod(double obj_data[][6]);

提前感谢

您的方法定义应如下所示(以匹配您的定义):

<>但是这不是有效的C++,因为只有第一个维度是不可定义的。请尝试以下操作:

int myMethod(double **obj_data, const int numOfColumns, int numOfRows)
{
    // Set the element in the last column / row to 5
    obj_data[numOfRows-1][numOfColumns-1] = 5;

    return 0;
}


int main(int argc, char* argv[])
{
    // Define array size
    int myNumOfRows = 5;
    const int numOfColumns = 6;

    // Allocate memory
    double** data = new double*[myNumOfRows];
    for (int i = 0; i < myNumOfRows; ++i)
    {
        data[i] = new double[numOfColumns];
    }

    // Do something with the array
    myMethod(data, numOfColumns, myNumOfRows);

    return 0;
}
int-myMethod(双**obj_数据,常量int-numOfColumns,int-numOfRows)
{
//将最后一列/行中的元素设置为5
obj_数据[numOfRows-1][numOfColumns-1]=5;
返回0;
}
int main(int argc,char*argv[])
{
//定义数组大小
int mynumorrows=5;
const int numOfColumns=6;
//分配内存
double**data=新的double*[mynumorrows];
对于(int i=0;i在C++中,可以使用<代码> STD::数组 ./P>
typedef std::array my_array\t;
int myMethod(const my_数组和obj_数据);

如果你的编译器仍然不支持std::array,你可以用它来代替。

我无法从这个问题中分辨出哪个维度是哪个维度,但这可能值得一试:

double (*data)[6] = new double[myVariableSize][6];
这应该起作用:

int myMethod(double obj_data[][6])
...
int myVariableSize = 10;
double (*data)[6] = new double[myVariableSize][6];
myMethod(data);

如前所述,只有第一个维度是可变的

我和我的同事无法理解你提出的问题。但这确实有效,并且确实可以编译:

int myMethod(double** obj_data)
{
    return 5;
}

int _tmain(int argc, _TCHAR* argv[])
{
    const int myVariableSize = 3;
    double** b = new double*[3];
    for (int i = 0 ; i < 3;i++)
    {
        b[i] = new double[myVariableSize];
    }

    myMethod(data);

    return 0;
}
int myMethod(双**obj_数据)
{
返回5;
}
int _tmain(int argc,_TCHAR*argv[]
{
常量int myVariableSize=3;
双精度**b=新双精度*[3];
对于(int i=0;i<3;i++)
{
b[i]=新的双精度[myVariableSize];
}
方法(数据);
返回0;
}

我建议你回到一个2D数组中使用双向量,或者使用一些Boost(我告诉)多维数组。< /P>你看到什么错误消息?这不明显,哪一种方式是正确的,但是OP看起来好像是二维混合了代码> Boo::数组< /COD>在C++中可用。code>std::array

来自C++0x,但已经得到许多现代编译器的支持。它不是双精度[6][],而是双精度[6]。也就是说,一个std::vector。@DeadMG,这取决于OP真正想要什么。问题不清楚。对不起,我只是在你的正文中输入了单间距字体的错误。@Martijn Courtaux,
std::bad_alloc
通常表示你内存不足或试图分配一个负长度数组。
myVariableSize
的值是多少?您确定它已初始化吗?要在注释中获取单间距文本,请在注释周围加上反勾(`)AHA!!谢谢你的提示!尺寸是负数+1:这很有效。我最初尝试过同样的东西,但由于某种原因无法编译。
int myMethod(double obj_data[][6])
...
int myVariableSize = 10;
double (*data)[6] = new double[myVariableSize][6];
myMethod(data);
int myMethod(double** obj_data)
{
    return 5;
}

int _tmain(int argc, _TCHAR* argv[])
{
    const int myVariableSize = 3;
    double** b = new double*[3];
    for (int i = 0 ; i < 3;i++)
    {
        b[i] = new double[myVariableSize];
    }

    myMethod(data);

    return 0;
}