gpt4 book ai didi

C 错误似乎是突然抛出的

转载 作者:行者123 更新时间:2023-11-30 17:56:33 25 4
gpt4 key购买 nike

我正在学习 C 语言在线类(class) ( link ),这是一段代码,其中包含我的一些打印内容:

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”没有被打印。这必定意味着错误位于这两个打印语句之间。

初始化 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”)。

最佳答案

stdout 通常是行缓冲的。因此,除非您打印的字符串以换行符结尾,否则它将被缓冲并稍后显示,可能最晚在程序退出时显示。

这意味着即使您没有看到 printf 的输出,问题也可能发生在 printf 之后。

为了避免这种情况,请在所有没有终止符的 printf 语句之后放置 fflush(stdout)换行符。

关于C 错误似乎是突然抛出的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13436538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com