我正在关注 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 循环的某个地方犯了一个错误,但这无关紧要,我担心没有打印“开始 for 循环”。这一定意味着错误介于这两个打印语句之间。
初始化 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”)。