これはちょっと基本的なことだとわかっていますが、私はこれに固執しています。 私はスドクゲームを作ろうとしてきました。議論はそれらを主に渡すことによって与えられるでしょう。 ** argvよりも別の配列に書き込もうとすると、整数変数をインクリメントするときにセグメント化エラーが発生します。メインに引数を渡す際のセグメンテーションエラー
int **ft_copy_sudoku(int argc, char **argv)
{
int **sudoku_arr;
int index;
int s_index;
int j;
printf("%d", argc);
sudoku_arr = (int **)malloc(sizeof(int) * 9 * 9);
index = 1;
while (index < argc)
{
j = 0;
s_index = 0;
//sudoku_array[s_index] = (int *)malloc(sizeof(int) * 9);
while (j < 9)
{
if (argv[index][j] >= '1' && argv[index][j] <= '9')
sudoku_arr[s_index][j] = argv[index][j] - '0';
else
argv[index][j] = 0;
j++;
s_index++;
}
index++;
}
return sudoku_arr;
}
void ft_print_sudoku(int **sudoku)
{
int i;
int j;
i = 0;
while (i < 9)
{
j = 0;
while (j < 9)
{
printf("%d ", sudoku[i][j]);
j++;
}
i++;
printf("\n");
}
}
int main(int argc, char **argv)
{
ft_print_sudoku(ft_copy_sudoku(argc, argv));
return (0);
}
gdbでデバッグすると、次のメッセージが表示されます。
あなたのコマンドラインパラメータが+あたり9つの文字のセットにおけるマーカーの数字の配列である(そして、あなたはこれらの9まで持っている)ことを前提に行くProgram terminated with signal SIGSEGV, Segmentation fault.
#0 0x000000000004007a6 in ft_print_sudoku (sudoku=0x1060420) at puzzle.c:62
62 j++;
そして、 'puzzle.c:62'はどうですか? – alk
私の記事の最後の行です。 j ++;私はそれを削除し、今問題のある行は39番目の行です。 sudoku_arr [s_index] [j] = argv [index] [j]; – Cornul11
デバッガは、エラーが発生した行だけでなく、プログラムがクラッシュしたときに正確に知るために、すべての変数(例: 'j')の内容を表示することができます。 –