私は初心者ですが、ポインタと他の関数にどのように渡されるのか少し混乱します。私はプロジェクトに取り組んでいます。私の主な機能では、ゲームボードを表すcharの2D配列をmallocします。Cで2次元配列のアドレスにアクセスしようとしたときにセグメント化エラーが発生しました
// In main, allocate 2D array
char **board = malloc(rows * sizeof(char*));
for (int i = 0; i < rows; i++) {
board[i] = malloc(cols * sizeof(char));
}
機能は、私のボードの変数をゲームの保存されたバージョンをロードし、したがって再malloc関数れる後で呼び出すことができます。
void stringToGame(char ***board, int *rows, int *cols, int *turn, int *winLength) {
// Set new values for rows and cols based on file
...
// Malloc board
*board = malloc(*rows * sizeof(char*));
for (int i = 0; i < *rows; i++) {
*board[i] = malloc(*cols * sizeof(char));
}
}
メイン関数でstringToGameメソッドを呼び出すと、ボードのアドレスを渡しています。
stringToGame(&board, &rows, &cols, &turn, &winLength);
ボードのアドレスを渡しているため、セグメンテーションフォルトが発生していますが、理由はわかりません。
2番目の質問として、私は新しいものをmallocする前にボード用に古い2D配列を解放する必要がありますか?
ボードの割り当て/再割り当て専用の機能があれば、コードを管理しやすくなります。 –
@ M.Mそれは私がそれを全く動かすことができるようになるとすぐに計画です! –