私はポインタを学習曲線上にあり、実際にはある方向/支援を使用することができます。私は構造体の配列を持っています。それぞれの構造体はさまざまなことを追跡する 'セル'です。すべてがうまくいくように見える、コンパイルエラーや何も私はマップを生成するために配列を使用しています。問題は、私がさまざまな時点でアレイにアクセスしようとするときに起こります。ときにはメモリアクセス違反が発生することもありますが、時には私はそうではありません。つまり、私は運が良かったということです。私はCにとって非常に新しく、どんな助けもありがたいです - 正しい方向を指しています。私は本当になぜ、どこで間違っているのかを理解したいと思っています。それは私の指針と記憶であると感じています。少し早いですがお礼を。構造体の配列にアクセスするメモリ違反
#define ysize 20
#define xsize 80
typedef struct cells {
int type;
bool visited;
bool passable;
int item;
} cells;
int getCell(int x, int y, struct cells **map)
{
return map[x + xsize * y]->type;
}
void setCell(int x, int y, int celltype, struct cells **map)
{
map[x + xsize * y]->type = celltype;
}
struct cells **makeMap()
{
struct cells **map = malloc(xsize * ysize * sizeof(struct cells *));
for (int i = 0; i != xsize * ysize; i++) {
map[i] = malloc(sizeof(struct cells));
map[i]->type = 0;
map[i]->item = 0;
map[i]->passable = true;
map[i]->visited = false;
}
return map;
}
void main()
{
struct cells ** map = makeMap();
//getRand generates a random number between the min and max supplied.
int x = getRand(0, xsize);
int y = getRand(0, ysize);
if (getCell(x, y, map) == tileCorridor || getCell(x, y, map) == tileDirtFloor){
//map[x + xsize * y]->item = 3;
//printf("%d", getCell(x, y, map));
}
// this is where the code is failing.
//sometimes it works, others it generates a memory error
destroyMap(map);
}
xの値は、Yものである:(http://stackoverflow.com/help/mcve)、最小完全、かつ検証例]投稿。 – Thomas
'void main()''int main()' – stackptr座標から 'struct 'のインデックスを計算する1次元マップを使用するのか、2次元マップを使用するのか混乱するようです。 Dマップには、 'struct'の他の1次元配列へのポインタの1次元配列があります。最初のケースでは、関数の戻り値の代わりに関数の引数を使用してポインタを設定しない限り、2つの星は必要ありません。 –