Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508

Сохранение RESULT Mysql как Variables/Value в структуре

05.05.2019, 15:31. Показов 1327. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, пишу прогу с минимальными понятиями С. Вроде пока все получалось, однако, когда стало нужно накормить Redis данными из MySql но при этом их параллельно юзать в проге,и тут произошел затык на готовности около 90%.
Проблема непонятна.
Я выложил на Github то что накатал.
Там что то с выделением и использованием памяти.

прога тут https://github.com/autooz/MySqlResult2VarVal

Помогите сделать по феншую.
У меня она либо падает либо при эксперементах жрет памяти при каждом обращении все больше и больше.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.05.2019, 15:31
Ответы с готовыми решениями:

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 75 in
Warning: mysql_result() : Unable to jump to row 0 on MySQL result index 75 in Z:\home\amm.su\WWW\modules\icq\index.php on line 27 ...

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\php\mysql.php on line 16
Не могу подключиться к базе...устал все перепроверять переписывать и пересоздавать... Я недавно тока занялся php начал изучать курс...

Error in MySQL result
В чем ошибка не могу увидеть ослеп в роди все правельно $res = mysql_query("SELECT COUNT(*) FROM gb");...

11
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
05.05.2019, 16:38
а в чем, собственно проблема?
0
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
05.05.2019, 17:16  [ТС]
Цитата Сообщение от shadowmaan Посмотреть сообщение
а в чем, собственно проблема?
В косяках работы с памятью выделяемой структурам при длинных данных char
0
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
05.05.2019, 17:25
zoleg, я рад сему событию. как я сразу не догадался
0
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
07.05.2019, 19:42  [ТС]
Там дебаг в консоль аж пошагово расставлен. Все понятно где что дергается. И есля я написал в третей строке месаги "Проблема непонятна.", то вопрос "а в чем, собственно проблема? ", не кажется уместным
0
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
07.05.2019, 21:50
ты об этом?

// char *QUERY = malloc(strlen("SELECT `num` FROM `drivershift`"));
// sprintf(QUERY,"SELECT `num` FROM `drivershift`");
// qresult =(MYSQL_RES*) get_result(mysqlThread, QUERY);
//// if(qresult != NULL)
//// {
//// // debug("\n qresult row_count=[%lu]",qresult->row_count);
//// }
//// else
//// {
//// debug("\n No result");
//// }
тут ошибка в работе с С-строкой. Строка должна завершаться нулевым символом, поэтому в malloc надо выделять памяти на один символ больше. sprintf допишет завершающий нуль. Сейчас же, для него нет места.

Вообще, если бы ты сразу привел проблемный кусок кода и описал в чем проблема, вопросов было бы меньше и кто-то быстрее мог бы помочь.
1
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
10.05.2019, 08:27  [ТС]
Ага, понял, спасибо, посмотрю

Не думаю что это единственный косяк, ведь я нуб в С с которым пришлось разбираться по причине жгучей и неотвратимой необходимости.
0
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
10.05.2019, 16:20  [ТС]
Не. Там что закоменченно, не юзается ни где. Валится тут
C
1
2
3
4
5
6
7
8
9
       
        newrec->next = NULL;
        debug("here2");
        newrec->key = name;
        debug("here3");
       // strcpy(newrec->num_order, name); 
         debug("here4");
         newrec->row= oneRow;
    }
на строке newrec->row= oneRow;
В файле mysql_select_mutly.c
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
28
void SelectedRowsInsert(ROWSOFSELECT plist, char *name, VARVALUESELECT oneRow)
{
    RowsOfSelect *hdr = (RowsOfSelect *) plist;
    RowsOfSelect *newrec = malloc(sizeof (RowsOfSelect));
   
if (newrec == NULL || name == NULL || oneRow == NULL)
        debug("Out of memory");
    
 
    debug("here1");
    if (oneRow != NULL)
    {
       
        newrec->next = NULL;
        debug("here2");
        newrec->key = name;
        debug("here3");
       // strcpy(newrec->num_order, name); 
         debug("here4");
         newrec->row= oneRow;
    }
   
#ifdef DEBUG
    debug("newrec->name=[%s],newrec->value=[%s]", newrec->key, newrec->row);
#endif
    newrec->next = hdr->next;
    hdr->next = newrec;
}
эта функция дергается из файла makeQueryToDb.c
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
extern MYSQL *mysqlThread;
 
ROWSOFSELECT * makeQueryForResult(char *QUERY)
{
    char tag[] = "doOtherFunctions";
    MYSQL_RES *qresult = NULL;
    MYSQL_FIELD *fields;
    MYSQL_ROW row;
    unsigned int num_fields;
    unsigned int num_rows;
 
    VARVALUESELECT select = NULL;
    ROWSOFSELECT selectrdRows = NULL;
    int i = 0;
 
    selectrdRows = SelectedRowsCreate();
 
    debug("%s", mysqlThread->host);
 
    if (!get_result(mysqlThread, QUERY, &qresult) == 0 && qresult == NULL)
    {
        return (-1);
    }
    if (qresult == NULL)
    {
        printf("ERROR in %s: qresult == NULL", tag);
        return (-1);
    }
 
    num_rows = mysql_num_rows(qresult);
 
 
    //  selectrdRows = SelectedRowsCreate();
 
    while (num_rows >= i)
    {
        num_fields = mysql_num_fields(qresult);
 
        if (num_fields < 0 || num_fields <= 0)
        {
            printf("MySQL error %s SELECT QUERY=[%s]", tag, QUERY);
 
        }
#if (defined DEBUG)   
        debug("%s num_fields=[%i]", tag, num_fields);
#endif
        select = SelectCreate();
 
        while ((row = mysql_fetch_row(qresult)))
        {
            for (i = 0; i < num_fields; i++)
            {
                fields = mysql_fetch_fields(qresult);
#if (defined DEBUG)   
                debug("[%s]=[%s]\n", fields[i].name, row[i]);
#endif
                SelectInsert(select, fields[i].name, row[i] ? row[i] : "NULL");
            }
            #if (defined DEBUG)  
            debug("SelectFind=[%s] ",SelectFind(select,"Name"));
            #endif
        }
        debug("SelectedRowsInsert i=[%i]",i);
        SelectedRowsInsert(selectrdRows, fields[i].name, select);
        //SelectDestroy(select);
        debug("Cicle i=[%i]",i),
 
 
 
        i++;
        if (num_rows >= i)
        {
            break;
        }
    }
 
 
    SelectedRowsDestroy(selectrdRows);
    mysql_free_result(qresult);
    return num_rows;
    return (EXIT_SUCCESS);
}
Добавлено через 3 минуты
DEBUG: SelectFind=[На Будрино]
DEBUG: [Mainpol_id]=[7]

DEBUG: newrec->name=[Mainpol_id],newrec->value=[7]
DEBUG: [Name]=[На Кузино]

DEBUG: newrec->name=[Name],newrec->value=[На Кузино]
DEBUG: [Vertices]=[(46.36007308959961 60.74414622226395,46.34138345718384 60.734308296135644,46.36127471923828 60.71182078123314,46.371145248413086 60.70402045429054,46.40058517456055 60.70985775472904,46.39942646026611 60.71451843487144,46.404619216918945 60.723344582347124,46.40908241271973 60.731780154483516,46.43388748168945 60.730542236601046,46.42342686653137 60.75194729480697,46.41955375671387 60.76500774722625,46.3903284072876 60.77186078452041,46.38050079345703 60.762178084445225,46.396658420562744 60.75018592806182,46.39851450920105 60.73276625830835,46.39456629753113 60.72391646663363,46.381187438964844 60.72469820024176,46.38560771942139 60.73913848629802,46.39294624328613 60.73974155347103,46.38702392578125 60.75073112333911,46.371188163757324 60.74265184881472,46.36007308959961 60.74414622226395)]

DEBUG: newrec->name=[Vertices],newrec->value=[(46.36007308959961 60.74414622226395,46.34138345718384 60.734308296135644,46.36127471923828 60.71182078123314,46.371145248413086 60.70402045429054,46.40058517456055 60.70985775472904,46.39942646026611 60.71451843487144,46.404619216918945 60.723344582347124,46.40908241271973 60.731780154483516,46.43388748168945 60.730542236601046,46.42342686653137 60.75194729480697,46.41955375671387 60.76500774722625,46.3903284072876 60.77186078452041,46.38050079345703 60.762178084445225,46.396658420562744 60.75018592806182,46.39851450920105 60.73276625830835,46.39456629753113 60.72391646663363,46.381187438964844 60.72469820024176,46.38560771942139 60.73913848629802,46.39294624328613 60.73974155347103,46.38702392578125 60.75073112333911,46.371188163757324 60.74265184881472,46.36007308959961 60.74414622226395)]
DEBUG: SelectFind=[На Кузино]
DEBUG: SelectedRowsInsert i=[3]
DEBUG: here1
DEBUG: here2
DEBUG: here3
DEBUG: here4

ВЫПОЛНЕНИЕ FINISHED; Segmentation fault; в реальном времени: 10ms; пользователь: 0ms; система: 0ms
0
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
10.05.2019, 16:52
На первый взгляд

C
1
2
3
4
5
6
typedef struct _RowsOfSelect
{
    char *key;
    VARVALUESELECT *row;
    struct _RowsOfSelect *next;
} RowsOfSelect;
тут row -- указатель на VARVALUESELECT, а в

C
1
void SelectedRowsInsert(ROWSOFSELECT plist, char *name, VARVALUESELECT oneRow)
не указатель. Соответственно,

C
1
newrec->row= oneRow;
не верно.

Либо row в RowsOfSelect должен быть не указателем (VARVALUESELECT row), либо newrec->row надо присваивать адрес oneRow (newrec->row = &oneRow).

Добавлено через 18 минут
Я подозреваю, что валится все тут
#ifdef DEBUG
debug("newrec->name=[%s],newrec->value=[%s]", newrec->key, newrec->row);
#endif

где происходит обращение к newrec->row
0
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
10.05.2019, 20:41  [ТС]
А как верно сделать?
0
85 / 61 / 29
Регистрация: 15.05.2013
Сообщений: 189
10.05.2019, 20:48
Учитывая то как ты работаешь с select (далее отрывки кода из разных мест)

select = SelectCreate();

VARVALUESELECT SelectCreate(void)
{
Select *hdr = calloc(1, sizeof (Select));
}

SelectedRowsInsert(selectrdRows, fields[i].name, select);

typedef struct _RowsOfSelect
{
VARVALUESELECT *row;
}

объяви row в структуре не указателем

VARVALUESELECT row;
1
69 / 62 / 13
Регистрация: 10.01.2012
Сообщений: 508
10.05.2019, 22:23  [ТС]
Ok.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.05.2019, 22:23
Помогаю со студенческими работами здесь

Php mysql $result
Всем привет!!!!! есть модуль джумла код Первый файл &lt;?php defined('_JEXEC') or die; ...

Тормоза MySQL, Sorting result
Здравствуйте. Имеется таблица с полями id,datetime,field1,field2 и еще ряд полей с данными. id - unsigned int, auto_increment,...

Resource(273) of type (mysql result)
ребят первый раз сталкиваюсь с такой ошибкой, resource(273) of type (mysql result), как её решить? $id=htmlspecialchars($_GET); ...

Supplied argument is not a valid MySQL result resource
Не отображает таблицу из бд. Таблица называется players. Показывает что ошибка гдето while($row=mysql_fetch_array($result))// берем...

mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Здравствуйте! Возникла проблема, php изучаю недолго, поиск мне ни капли не помог, несмотря на обилие похожих тем. Суть в следующем - при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru