[英]Can't assign value to 2d array object member
const int MAP_WIDTH = 100;
const int MAP_HEIGHT = 100;
const int RANDOM_POINTS = 10;
const int seeds = 3;
struct Point
{
int x;
int y;
int tileIndex;
};
Point* points = new Point[RANDOM_POINTS];
Point* mapPoints[MAP_WIDTH][MAP_HEIGHT];
Point* nearestPoint(int x, int y)
{
Point* ptr;
ptr = points;
Point* nearest_point;
int nearest_dis = 1000;
int distance;
for (int i = 0; i < RANDOM_POINTS; i++, ptr++)
{
int dx = ptr->x;
int dy = ptr->y;
distance = abs(dx - x) + abs(dy - y);
if (distance < nearest_dis)
{
nearest_point = ptr;
nearest_dis = distance;
}
}
return nearest_point;
}
int main(int argc,char* args[])
{
srand(seeds);
int min = 25;
int max = 75;
for (int i = 0; i < RANDOM_POINTS; i++)
{
points[i].x = rand() % (max - min + 1) + min;
points[i].y = rand() % (max - min + 1) + min;
points[i].tileIndex = rand() & 6;
}
std::ofstream mapFile;
//mapFile.open("res/mapFile.map",std::ios::app);
for (int px = 0; px < MAP_WIDTH; px++)
{
for (int py = 0 ; px < MAP_HEIGHT; py++)
{
mapPoints[px][py]->x = px;
mapPoints[px][py]->y = py;
mapPoints[px][py]->tileIndex = nearestPoint(mapPoints[px][py]->x, mapPoints[px][py]->y)->tileIndex;
std::cout << mapPoints[px][py]->x << mapPoints[px][py]->y << std::endl;
/*if(px<MAP_WIDTH-1)
mapFile << mapPoints[px][py]->tileIndex << ",";
else
mapFile << mapPoints[px][py]->tileIndex << "\n";*/
}
}
mapFile << std::endl;
mapFile.close();
//std::cout << nearestPoint(3, 3)->tileIndex << std::endl;
return 0;
}
points[RANDOM_POINTS]
存储随机生成的点。
mapPoints[MAP_WIDTH][MAP_HEIGHT]
是地图大小。
这段代码的目的是将随机生成的瓦片类型索引输出到一个文本文件,所以我可以将它与tileset.png 文件一起使用。
但我发现二维数组mapPoints[MAP_WIDTH][MAP_HEIGHT]
为空。无法为数据成员 x ,y ,index 赋值。 我不知道问题出在哪里。
Point* mapPoints[MAP_WIDTH][MAP_HEIGHT];
...
mapPoints[px][py]->x = px;
mapPoints
是一个指针数组。 指针不指向任何地方。 由于mapPoints
是一个全局变量,所以它被初始化为nullptr
。 nullptr
是无效指针,取消引用它mapPoints[px][py]->x
是未定义的行为,很可能会导致类似于“分段错误”或其他奇怪错误的事情。
如果你想存储一些东西,你需要有内存,而不是指针。
Point mapPoints[MAP_WIDTH][MAP_HEIGHT];
...
mapPoints[px][py].x = px;
同样在这一行:
Point* points = new Point[RANDOM_POINTS];
您正在分配RANDOM_POINTS
点。 但你永远不会delete
它们。 这会泄漏内存。 做就是了:
Point points[RANDOM_POINTS];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.