Mijn programma crasht soms bij het aanroepen van PQexec. Het vreemde is het soms helemaal niet crasht en als het crasht dan crasht het altijd op verschillende queries. Het is dus niet een specifieke query die de boel onderuit haalt.
De functie waar het mis gaat.
db_conn is buiten de functie gedefiniëerd. Een backtrace geeft het volgende:
Ik heb werkelijk geen idee wat het probleem kan zijn. db_conn is een geldige verbinding naar PostgreSQL, db_query is een geldige query (en anders zou dat ook niet het programma moeten kunnen crashen). Enig idee wat ik hier fout doe?
De functie waar het mis gaat.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| long load_group(struct nntp_group *group) { char db_query[1024]; PGresult *db_result; int col_group_id; long col_highest, article_count; sprintf(db_query, "SELECT * FROM load_group('%s', %ld, %ld);", group->group_name, group->lowest, group->highest); db_result = PQexec(db_conn, db_query); if (PQresultStatus(db_result) == PGRES_TUPLES_OK) { // retrieve column numbers col_group_id = PQfnumber(db_result, "group_id"); col_highest = PQfnumber(db_result, "highest"); group->db_id = atoi(PQgetvalue(db_result, 0, col_group_id)); group->lowest = atol(PQgetvalue(db_result, 0, col_highest)); article_count = group->highest - group->lowest + 1; PQclear(db_result); return article_count; } else { return -1; } } |
db_conn is buiten de functie gedefiniëerd. Een backtrace geeft het volgende:
PQgetResult is een functie die door libpq intern wordt aangeroepen van de functie PQexec. Regel 28 in db.c is de regel die PQexec aanroept.Program received signal SIGSEGV, Segmentation fault.
0x001bc83e in ?? () from /lib/tls/i686/cmov/libc.so.6
(gdb) backtrace
#0 0x001bc83e in ?? () from /lib/tls/i686/cmov/libc.so.6
#1 0x001beafd in ?? () from /lib/tls/i686/cmov/libc.so.6
#2 0x001c0f9c in malloc () from /lib/tls/i686/cmov/libc.so.6
#3 0x00139617 in ?? () from /usr/lib/libpq.so.5
#4 0x0014531f in ?? () from /usr/lib/libpq.so.5
#5 0x0013a868 in ?? () from /usr/lib/libpq.so.5
#6 0x0013c541 in PQgetResult () from /usr/lib/libpq.so.5
#7 0x0013c800 in ?? () from /usr/lib/libpq.so.5
#8 0x08048cdf in load_group (group=0x8066468) at db.c:29
#9 0x08049293 in nntp_process_group (groups=0x804c038, group_line=0x80558dd "msn.forums.outdoors.recreation.general") at nntp.c:138
#10 0x0804913a in nntp_list (connection=0x8055890, groups=0x804c038) at nntp.c:105
#11 0x080495bb in main () at main.c:48
Ik heb werkelijk geen idee wat het probleem kan zijn. db_conn is een geldige verbinding naar PostgreSQL, db_query is een geldige query (en anders zou dat ook niet het programma moeten kunnen crashen). Enig idee wat ik hier fout doe?
Ik ontken het bestaan van IE.