Ну, я уже неделю работаю над этим маленьким проектом как учебный опыт, когда я беру курсы C. Я до сих пор работал с ней почти безошибочно, мне было поручено сделать * con struct, потому что в конце я получал огромный стек (который был вызван проблемой указателя)SegFaults в C/MySQL через структурированный код
Моя программа отлично работает, все , Однако при закрытии соединения mysql я получаю segfault.
Код:
#include <my_global.h>
#include <mysql.h>
#include <string.h>
#include <stdlib.h>
struct sql {
MYSQL *con;
};
int try(char getInput[100]) {
struct sql grab;
MYSQL_RES *res;
MYSQL_ROW row;
char *server = "localhost";
char *user = "root";
char *password = "iluvgeordi";
char *database = "test";
if(strcmp(getInput, "version") == 0)
printf("\n->Mysql Version: %s\n", mysql_get_client_info());
else if(strcmp(getInput, "get") == 0) {
grab.con = mysql_init(NULL);
if(!mysql_real_connect(grab.con, server, user, password, database, 0, NULL, 0)) {
fprintf(stderr, "%s\n", mysql_error(grab.con));
exit(1);
}
if(mysql_query(grab.con, "show tables")) {
fprintf(stderr, "%s\n", mysql_error(grab.con));
exit(1);
}
res = mysql_use_result(grab.con);
if(res != NULL) {
while((row = mysql_fetch_row(res)) != NULL)
printf("%s \n", row[0]);
}
mysql_free_result(res);
}
mysql_close(grab.con);
}
Даже если я знаю его в mysql_close, здесь GDB Stack дамп/Назад Трассировка
Программа получила сигнал SIGSEGV, неисправность Сегментация. 0xf7cca37e в mysql_close() из /usr/lib/i386-linux-gnu/libmysqlclient.so.18 (GDB) где
0 0xf7cca37e в mysql_close() из/USR/Lib/i386-Linux-гну/libmysqlclient.so.18
1 0x08048afa в попытке (getInput = 0xffffd37c "версия") в м-try.c: 61
2 0x0804894b в главной (ARGC = 1, ARGV = 0xffffd494) в main.c : 37 (GDB) BT
0 0xf7cca37e в mysql_close() из /usr/lib/i386-linux-gnu/libmysqlclient.so.18
1 0x08048afa в попытке (getInput = 0xffffd37c "версия") в м-try.c: 61
2 0x0804894b в главной (ARGC = 1, ARGV = 0xffffd494) в main.c: 37 (GDB) бросить
Я знаю, что есть 1000-х вопросов MySQL C, однако ни один из них не являются relavent к тому, что мне нужно в противном случае я, конечно, нашел бы его сейчас.
большое спасибо. Извините, если я кажусь глупым, я просто изучаю C и как использовать GDB, и каждый ответ мешает мне задавать более глупые вопросы. Я бы троекратно поднял вас, если это возможно. – IndependentProgrammer
Не волнуйся, я могу помочь. Но если вы хотите, вы можете принять ответ, чтобы понять, что проблема решена –