私は C のオンライン コースに従っています (リンク)。
void Database_create(struct Connection *conn, int max_rows, int max_data)
{
printf("Database_create with max_rows = %d, max_data = %d\n",max_rows,max_data);
int i = 0;
printf("Starting for-loop\n");
for(i = 0; i < max_rows; i++) {
printf("i");
struct Address addr = {.id = i, .set = 0};
printf("a");
conn->db->rows[i] = addr;
}
printf("Done!");
}
これを実行すると、上記の関数が呼び出され、出力は次のようになります。
toon@ToonAlfrinkPC ~/Projects/lcthw $ ./ex17 test.db c 200 513
Database_create with max_rows = 200, max_data = 513
Segmentation fault
今、私は for ループのどこかで間違いを犯したと確信していますが、それは無関係です。「Starting for-loop」が出力されないことが心配です。これは、エラーがこれら 2 つの print ステートメントの間のどこかにあることを意味しているに違いありません。
i の初期化または printf の呼び出しによってセグメンテーション エラーが発生しましたか? そうでない場合、空白はありましたか?どうすればそれが可能でしょうか?
注:コンパイルするのを忘れていませんでした。
編集:
さらに混乱を招くのは、Database_create 関数が調整なしで正常に機能するようになったことです。
異なる機能を同時に実行することは可能ですか? プログラムは次のようになります。
if(argc != 5) die(conn, "USAGE: ex17 <dbfile> create <max_rows> <max_data>");
Database_create(conn,atoi(argv[3]),atoi(argv[4]));
Database_write(conn);
break;
Database_write 関数がエラーを引き起こしているようですが、Database_create が完了する前にそのエラーがスローされる可能性はありますか?
編集:
「調整なし」と言いましたが、最後のコメントの後に改行を入れました(「完了!\ n」)。