gpt4 book ai didi

在 for 循环期间控制台在 C 中崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 03:48:52 25 4
gpt4 key购买 nike

因此,我开始使用 SDL 和 C 编写游戏,在开始的几个小时内,只有 2 个函数且没有那么多行,我遇到了控制台崩溃的情况。我得到了一个类型结构的二维数组,其中包含结构 SDL_Rect(对于具有 int x,y 的表面坐标)。

我创建了一个函数,通过使用两个 for 循环来初始化数组的所有坐标。该错误似乎发生在第一次循环的第二次迭代结束时,当时代码进行了第三次迭代。在每次赋值之前和之后,我在循环的每个阶段测试数组的值时做出了我的猜测。

这是我的功能:

void InitializeCoordinate(BrickStruct (*Grid)[10][12])
{
int i=0,j=0;
for(i=0;i<10;i++)
{
for(j=0;j<12;j++)
{
Grid[i][j]->Coordinate.x = j*80;
Grid[i][j]->Coordinate.y = i*40;
}
}
}

这是我的结构:

typedef struct BrickStruct
{
int type;
SDL_Rect Coordinate; //Struct using 2 int x,y to define coordinates of a surface
}BrickStruct;

在我的 main 中,我创建了 Grid 结构并将我的 Grid 传递给我的函数。这是在 SDL_Surface *ecran=NULL;SDL_Init(SDL_INIT_VIDEO) 之间:

BrickStruct Grid[10][12];
InitializeCoordinate(&Grid);

这就是一切。我和我的同事就此被困了几个小时。我们得到的控制台代码错误报告是 -1073741510 和 -1073741819 (0xc0000005)。也许一个善良的灵魂会想要引导我们走向美好的道路? :)

提前致谢

最佳答案

您正在传递一个指向二维数组的指针。

你所做的是:

 Grid[i][j]->Coordinate.x = ...

等于:

 *(Grid[i][j]).Coordinate.x = ...

但这是错误的,您不想对指针进行算术运算,而是对数组进行运算。所以你必须先取消引用指针才能访问数组:

 (*Grid)[i][j].Coordinate.x = ...

通过这种方式您可以访问数组,然后对其执行操作。

关于在 for 循环期间控制台在 C 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22239148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com