gpt4 book ai didi

c - postgreSQL 客户端 (libpq) 中的段错误

转载 作者:行者123 更新时间:2023-11-29 12:06:24 25 4
gpt4 key购买 nike

我正在使用 libpq 开发一个 postgreSQL 客户端应用程序。 gcc 编译它没有错误。然而,当我运行程序时,这个函数:

void print_column(PGconn *connection) {

PGresult *id_list;
int row;

// process_query() calls PQexec(), checks for errors, then returns the result
id_list = process_query(connection, "SELECT id FROM customers WHERE state='CA'");

for(row = 0; row < PQntuples(id_list); row++) {
printf("%s\n", PQgetvalue(id_list, row, 0));

// to pause the loop on each rep for debugging
getchar();
}
}

产生错误:

row number 1701734765 is out of range 0..8
Segmentation fault

奇怪的是 for 循环毫无问题地执行了前五次重复。然后它导致第六个段错误。

我没有发布整个程序,因为它有 1000 多行。任何建议将不胜感激。

最佳答案

这不会导致段错误,但您发布的代码中存在错误。

printf("%i\n", PQgetvalue(id_list, row, 0));

PQgetvalue 函数返回一个 char *,但您将其打印为一个 int。 GCC 和 Clang 都有关于类型不匹配的警告,我建议使用 -Wall -Wextra 或至少使用 -Wall。您可以使用 -Wformat 打开格式不匹配警告。 (此错误几乎肯定不会导致段错误,但会导致输出不正确。)

但是 PQgetvalue 不应该导致段错误(您还没有调用 PQclear,对吧?)。您的程序中的其他地方可能存在损坏内存的错误。您可以使用诸如 Valgrind 之类的工具来尝试检测此类错误。 1000行不是很长,这样的问题是棘手的,你也可以用#ifdef 0...#endif注释掉各个部分,直到错误停止,如果你很绝望。

关于c - postgreSQL 客户端 (libpq) 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10359298/

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