Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中拆分数组+;_C++_Arrays - Fatal编程技术网

C++ 在C+中拆分数组+;

C++ 在C+中拆分数组+;,c++,arrays,C++,Arrays,我正在制作一个游戏,我有一系列的浮标,这些浮标制作了一个3D模型,我已经用opengl放置在其中。我想做的是分离x,y和z坐标,并将它们做成一个多维数组。我想这样做,以便我可以调整y位置相对于地形。我在init函数中放置的for循环如下所示: for (int x = 0; x < sizeof(desert_scene_plainVerts); x++) { if (((x + 3)%3) == 0) { //x coord terrain

我正在制作一个游戏,我有一系列的浮标,这些浮标制作了一个3D模型,我已经用opengl放置在其中。我想做的是分离x,y和z坐标,并将它们做成一个多维数组。我想这样做,以便我可以调整y位置相对于地形。我在init函数中放置的for循环如下所示:

    for (int x = 0; x < sizeof(desert_scene_plainVerts); x++) {
    if (((x + 3)%3) == 0) {
        //x coord
        terrainxPos[x/3] = desert_scene_plainVerts[x];
    }
    else if (((x + 1)%3) == 0) {
        //z coord
        terrainzPos[(x-2)/3] = desert_scene_plainVerts[x];
    }
    else{
        //y coord
        terrainzPos[(x-1)/3] = desert_scene_plainVerts[x];
    }
}
Thread 1: EXC_BAD_ACCESS (code=2, address= 0x10 etc.)
错误如下:

    for (int x = 0; x < sizeof(desert_scene_plainVerts); x++) {
    if (((x + 3)%3) == 0) {
        //x coord
        terrainxPos[x/3] = desert_scene_plainVerts[x];
    }
    else if (((x + 1)%3) == 0) {
        //z coord
        terrainzPos[(x-2)/3] = desert_scene_plainVerts[x];
    }
    else{
        //y coord
        terrainzPos[(x-1)/3] = desert_scene_plainVerts[x];
    }
}
Thread 1: EXC_BAD_ACCESS (code=2, address= 0x10 etc.)

有人知道我做错了什么。

假设您正确地声明了
terrainxPos[]
terrainyPos[]
terrainzPos[]
,那么您的逻辑看起来不错。如果这些是
vector
s,请确保
resize()
它们正确

但是,您的循环可能更清晰,更容易推理,如下所示:

for (int x = 0, v = 0; x < sizeof(desert_scene_plainVerts); x += 3, v++) {
    terrainxPos[v] = desert_scene_plainVerts[x + 0];
    terrainyPos[v] = desert_scene_plainVerts[x + 1];
    terrainzPos[v] = desert_scene_plainVerts[x + 2];
}
for(int x=0,v=0;x
我想也许(x-1)/3给出的是一个浮点数而不是整数。尝试使用
ceil((x-1)/3)
(x-1)/3>>0
打字?你说的是
y坐标
,但你输入的是
terrainzPos
@KumarHarsh不,它不做浮点运算:
x
是一个
int
,C方言不会将任何整数转换成浮点,除非其中一个操作数是浮点。@cmaster哦,天哪。。。当然,你是对的!太多的JS杀死了我的C:(你说调整大小()是什么意思?@DavidGraovac:resize它们足够大以容纳所有的平原。顺便说一句,我刚刚注意到了真正的问题:
sizeof
。我想你可能是指
沙漠场景\u平原。size()
如果它是
向量,或者
sizeof如果它是一个数组的话,@DavidGraovac:你需要在循环之前调整它的大小。例如,
terrainxPos.resize(沙漠场景\u plainVerts.size()/3);