私は他の質問を見てきましたが、これに対する明確な答えを見つけることができないようです. 構造体内で構造体配列を宣言するにはどうすればよいですか? main() で実行しようとしましたが、正しく実行しているかどうかわかりません。「初期化により、キャストなしでポインターから整数が作成されます」という警告が表示され続けます。
#define MAXCARDS 20
struct card {
int priority;
};
struct battleQ {
struct card cards[MAXCARDS];
int head;
int tail;
int size;
};
int main (int argc, char *argv[]) {
struct battleQ bq;
bq.cards = {
malloc(MAXCARDS * sizeof (struct card)), //Trouble with this part
0,
0,
0
};
//...
return 1;
}
提案後に編集: さて、問題が発生しました。このエラーが発生し続けます:
3 [main] TurnBasedSystem 47792 open_stackdumpfile: Dumping stack trace to TurnBasedSystem.exe.stackdump
コードを少し変更して、すべてをポインターにする必要がありました。私はそれをテストしましたが、次のような属性のいずれかを割り当てようとするとすぐにエラーが発生します: bq->head = 0
全体として、キューにカードを追加するだけです。修正されたコードは次のとおりです。
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#define MAXCARDS 20
struct card {
int priority;
};
// A queue defined by a circular array
struct battleQ {
struct card *cards[MAXCARDS];
int head;
int tail;
int size;
};
bool battleQEnqueue (struct battleQ *bq, struct card *c);
bool battleQisFull(struct battleQ *bq);
// Method for enqueuing a card to the queue
bool battleQEnqueue (struct battleQ *bq, struct card *c) {
bool success = false;
if (battleQisFull(&bq)) {
printf("Error: Battle queue is full\n");
} else {
success = true;
bq->cards[bq->tail] = c;
bq->size = bq->size + 1;
bq->tail = (bq->tail + 1) % MAXCARDS;
}
return success;
}
int main (int argc, char *argv[]) {
int i;
struct battleQ *bq;
memset(&bq, 0, sizeof(bq)); // Did I do this properly?
bq->tail = 0; // Gives error at this point
bq->head = 0;
bq->size = 0;
// This is where I create a card and add it to the queue but the main problem
// is still the initialization above
for (i = 0; i < 5; i++) {
struct card *c = malloc(sizeof(c));
c->priority = i + 10;
printf("%d,", c->priority);
battleQEnqueue(&bq, &c);
}
return 1;
}