【发布时间】:2011-04-03 14:49:34
【问题描述】:
float sampleGrid1[5][5][5] =
{
{
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0}
},
{
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 1.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0}
},
{
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 1.0, 0.0, 0.0},
{0.0, 1.0, 1.0, 1.0, 0.0},
{0.0, 0.0, 1.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0}
},
{
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 1.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0}
},
{
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0},
{0.0, 0.0, 0.0, 0.0, 0.0}
}
};
typedef struct
{
int Nx;
int Ny;
int Nz;
float*** M;
}OG;
相关功能:
OG *newOG(){
OG *newOG = (OG *)malloc(sizeof(OG));
if (newOG == NULL)
{
throw std::exception("newOG : no memory is available");
}
return newOG;
}
int initiateOG(OG *MyOG)
{
ifstream dump("OGdump3.txt");
if (dump.is_open())
{
while ( dump.good() )
{
dump >> MyOG->Nx;
dump >> MyOG->Ny;
dump >> MyOG->Nz;
MyOG->M = new float**[MyOG->Nx];
for(int i = 0; i < MyOG->Nx; i++)
{
MyOG->M[i] = new float*[MyOG->Ny];
for(int j = 0; j < MyOG->Ny; j++)
{
MyOG->M[i][j] = new float[MyOG->Nz];
}
}
for(int z=0;z < MyOG->Nz; z++){
for(int y=0;y < MyOG->Ny; y++){
for(int x=0;x < MyOG->Nx; x++){
dump >> MyOG->M[x][y][z];
}
}
}
}
dump.close();
}
else return 0;
return 1;
}
我想将一些示例网格硬编码到代码中,但不知道创建它们的最佳方法,我必须使用 for 循环吗?
如果可能,我不想更改我的 typedef struct OG
修改:
OG *occupancyGrid;
void initialize3dArray(int x, int y, int z,float*** array)
{
array = new float**[x];
for(int i = 0; i < x; i++)
{
array[i] = new float*[y];
for(int j = 0; j < y; j++)
{
array[i][j] = new float[z];
}
}
}
void sampleOG1()
{
occupancyGrid = newOG();
occupancyGrid->Nx = 5;
occupancyGrid->Ny = 5;
occupancyGrid->Nz = 5;
initialize3dArray(5, 5, 5,occupancyGrid->M);
for(int z=0;z < occupancyGrid->Nz; z++){
for(int y=0;y < occupancyGrid->Ny; y++){
for(int x=0;x < occupancyGrid->Nx; x++){
occupancyGrid->M[x][y][z] = sampleGrid1[x][y][z];
}
}
}
}
initialize3dArray这个函数没有编译错误,但还是会导致程序崩溃
【问题讨论】:
-
rectest.cpp:在函数“OG* sampleOG1()”中:rectest.cpp:59:错误:“newOG”未在此范围内声明 rectest.cpp:63:错误:“occupancyGrid”未在此范围内声明
-
我很高兴有一个相关的功能(相关性?)。 No problem with the initial snippet here。您的确切问题是什么?
-
@Oswald:报告您自己的编译失败几乎没有帮助
标签: c++ c initialization multidimensional-array