使用 for 循环在数组中设置值时程序冻结,C Devkitpro 3DS
Program freezes when setting values in an array using for loops, C Devkitpro 3DS
对于 3DS 的类似 Minecraft 的自制克隆,我正在尝试创建一个名为 Chunk 的数据结构,其中包含一个位置和一个 3D 整数数组,其中数组中的一个整数代表一个块 ID .
定义如下:
typedef struct{
Vector3 position; //Vector3 is a struct that simply contains xyz as floats, similar to Unity
int blocks[16][128][16]; //Array of ints, each int represents a block ID
} Chunk;
为了填充块,我有一个函数接受一个指向变量的指针。它旨在用它应该包含的方块 ID 填充 'blocks' 数组。
然而,这并没有发生,程序在执行时挂起。
函数是这样的:
void generate_chunk(Chunk *chunk)
{
int newBlocks[16][128][16]; //Create temp 3D array
int x,y,z; //For loop coordinate values
for(x=0; x<16; x++) { //Loop X
for(z=0; z<16; z++) { // Loop Z
for(y=0; y<128; y++) { // Loop Y
//<enum> BLOCK_GOLD_ORE = 6, as a test
newBlocks[x][y][z]=(int)BLOCK_GOLD_ORE; //Set the value in the position xyz of the array to 6
}
}
}
/* The runtime then freezes/crashes whenever the array "newBlocks" is referenced. */
printf("\x1b[14;2Hgenerate_chunk :: %i", newBlocks[0][0][0]); //Debug print //!Crashes
//! vvv Uncomment when I've solved the problem above
//! memcpy(chunk->blocks, newBlocks, sizeof(chunk->blocks)); //Copy the temp array to the struct
}
并被称为:
Chunk newChunk;
generate_chunk(&chunk);
每当此后引用数组或其任何值时,程序就会挂起。
奇怪的是,如果我将函数调用放在 if 语句后面,程序仍然会在第一帧冻结,尽管当时没有调用它。
更奇怪的是,如果我像这样在没有 for 循环的情况下分配值:
void generate_chunk(Chunk *chunk)
{
int newBlocks[16][128][16]; //Create temp 3D array
newBlocks[0][0][0]=(int)BLOCK_GOLD_ORE; //Set its first value to 6 (enum)
printf("\x1b[14;2Hgenerate_chunk :: %i", newBlocks[0][0][0]); //Debug print, doesnt crash anymore
}
程序不再挂起。每当我尝试使用 for 循环分配值时,它似乎都会失败。我可能遗漏了一些明显的东西,但这让我认为这甚至可能是编译器的问题(可能不是)
编译器是DEVKITPRO下的GCC。
谢谢!
好吧,似乎 3DS 不允许在 [19][19][19] 以上的 3D 阵列,当所有边都相等时,尽管如果您使尺寸不相等,这可能会很灵活。
对于 3DS 的类似 Minecraft 的自制克隆,我正在尝试创建一个名为 Chunk 的数据结构,其中包含一个位置和一个 3D 整数数组,其中数组中的一个整数代表一个块 ID .
定义如下:
typedef struct{
Vector3 position; //Vector3 is a struct that simply contains xyz as floats, similar to Unity
int blocks[16][128][16]; //Array of ints, each int represents a block ID
} Chunk;
为了填充块,我有一个函数接受一个指向变量的指针。它旨在用它应该包含的方块 ID 填充 'blocks' 数组。
然而,这并没有发生,程序在执行时挂起。 函数是这样的:
void generate_chunk(Chunk *chunk)
{
int newBlocks[16][128][16]; //Create temp 3D array
int x,y,z; //For loop coordinate values
for(x=0; x<16; x++) { //Loop X
for(z=0; z<16; z++) { // Loop Z
for(y=0; y<128; y++) { // Loop Y
//<enum> BLOCK_GOLD_ORE = 6, as a test
newBlocks[x][y][z]=(int)BLOCK_GOLD_ORE; //Set the value in the position xyz of the array to 6
}
}
}
/* The runtime then freezes/crashes whenever the array "newBlocks" is referenced. */
printf("\x1b[14;2Hgenerate_chunk :: %i", newBlocks[0][0][0]); //Debug print //!Crashes
//! vvv Uncomment when I've solved the problem above
//! memcpy(chunk->blocks, newBlocks, sizeof(chunk->blocks)); //Copy the temp array to the struct
}
并被称为:
Chunk newChunk;
generate_chunk(&chunk);
每当此后引用数组或其任何值时,程序就会挂起。
奇怪的是,如果我将函数调用放在 if 语句后面,程序仍然会在第一帧冻结,尽管当时没有调用它。
更奇怪的是,如果我像这样在没有 for 循环的情况下分配值:
void generate_chunk(Chunk *chunk)
{
int newBlocks[16][128][16]; //Create temp 3D array
newBlocks[0][0][0]=(int)BLOCK_GOLD_ORE; //Set its first value to 6 (enum)
printf("\x1b[14;2Hgenerate_chunk :: %i", newBlocks[0][0][0]); //Debug print, doesnt crash anymore
}
程序不再挂起。每当我尝试使用 for 循环分配值时,它似乎都会失败。我可能遗漏了一些明显的东西,但这让我认为这甚至可能是编译器的问题(可能不是)
编译器是DEVKITPRO下的GCC。
谢谢!
好吧,似乎 3DS 不允许在 [19][19][19] 以上的 3D 阵列,当所有边都相等时,尽管如果您使尺寸不相等,这可能会很灵活。